Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 循环,直到列表中的值用尽_Python_List_Pandas - Fatal编程技术网

Python 循环,直到列表中的值用尽

Python 循环,直到列表中的值用尽,python,list,pandas,Python,List,Pandas,我有一个包含子列表的列表k=[]。 我写了一个片段,在其中我获取子列表k[0]和k[1],我进行比较,得到一个新的out=[]列表: for i in range(len(k[0])): for j in range(len(k[1])): r = list(chain(k[0][i],k[1][j])) j = [i for i, _ in groupby(r)] if len(j) < len(r):

我有一个包含子列表的列表
k=[]
。 我写了一个片段,在其中我获取子列表
k[0]
k[1]
,我进行比较,得到一个新的
out=[]
列表:

  for i in range(len(k[0])):
      for j in range(len(k[1])):
          r = list(chain(k[0][i],k[1][j]))
          j = [i for i, _ in groupby(r)]
          if len(j) < len(r):
             out.append(j)
然后将再次执行
for
循环,但要使用新值
k[0]
k[1]
,直到子列表在
k[2:][/code>

我用“while”和“try”尝试了一些东西,但现在结果很糟糕

这是一段需要测试的较大代码:

import networkx as nx
import matplotlib.pyplot as plt
import pandas as pd
from itertools import chain, combinations, groupby

df = pd.read_csv("graph.csv", sep=';', encoding='utf-8')

g = nx.Graph()
g = nx.from_pandas_dataframe(df, 'nodes_1', 'nodes_2')

plt.show()


a1 = pd.Series([0] + df['nodes_2'][df['nodes_2']%2==0].values.tolist())
a2 = pd.Series(df['nodes_2'][df['nodes_2']%2==1].values.tolist())

b1, b2 = a1.apply(g.neighbors), a2.apply(g.neighbors)

c1, d1 = a1.values.tolist(), b1.values.tolist()
c2, d2 = a2.values.tolist(), b2.values.tolist()

e00=[]
for i in range(len(c1)):
    for j in range(len(d1[i])):
        if d1[i][j]%2==0:
           d = [c1[i],d1[i][j]]
           e00.append(d)

e01=[]
for i in range(len(c1)):
    for j in range(len(d1[i])):
        if d1[i][j]%2==1:
           d = [c1[i],d1[i][j]]
           e01.append(d)

e10=[]
for i in range(len(c2)):
    for j in range(len(d2[i])):
        if d2[i][j]%2==0:
           d = [c2[i],d2[i][j]]
           e10.append(d)

e11=[]
for i in range(len(c2)):
    for j in range(len(d2[i])):
        if d2[i][j]%2==1:
           d = [c2[i],d2[i][j]]
           e11.append(d)

a00 = pd.DataFrame(e00)
a01 = pd.DataFrame(e01)
a10 = pd.DataFrame(e10)
a11 = pd.DataFrame(e11)

a = input('Write a binary number. \n')

b=[]
for i in range(len(a)-1):
    c = a[i:i+2]
    b.append(c)

print (b, '\n')

dct = {'00' : e00, '01' : e01, '10' : e10, '11' : e11}  

k=[]
for i in b:
    y = dct[i]
    k.append(y)

out=[]    
for i in range(len(k[0])):
    for j in range(len(k[1])):
        r = list(chain(k[0][i],k[1][j]))
        j = [i for i, _ in groupby(r)]
        if len(j) < len(r):
             out.append(j) 

print (k, '\n')
print (out, '\n')
我想做什么

键入示例二进制字符串:
001101
后,我得到分配给字典的值:
['00'、'01'、'11'、'10'、'01']
。在每个字母中,a00、a01、a10、a11都是相同的数据。我的循环获取与“00”匹配的数据,并将其与“01”下的数据进行比较。将创建一个列表
out
。如您所见,值
“11”、“10”、“01”
仍未使用。因此,
out
列表将检索下一个值进行比较,并执行与以前相同的操作。直到耗尽
['00'、'01'、'11'、'10'、'01']

我正在考虑替换k=[out,k[2:]以便仍然使用相同的循环。

如果这种方法对您有效,您可以尝试这种方法,这不是一个精确的解决方案,您可以从中获得帮助和提示。 正如您所评论的,您需要2-2个卡盘,但在一个卡盘之后,您需要该卡盘替换这两个项目,例如:

first for itertation ==>> ['00', '01'] = out_list  now origional list become  [[out_list], '11', '10', '01']
for second iteration ==>> [[out_list], '11'] = out_list  now origional list become  [[out_list],'10', '01']
for third iteration ==>> [[out_list],10]  = out_list now origional list become  [[out_list],'01]

for forth iteration ==>> [[out_list],'01'] = out_list now origional list become [[out_list]]
以下是方法:

actual_list=['00', '01', '11', '10', '01']

def group(updated_list,actual_list):
    print(updated_list)  #This is just for showing output
    exit_condition = []
    for item in updated_list:

        if not isinstance(item,list):
            exit_condition.append(item)
    if not exit_condition:
        return 0
    else:
        out = []
        for index in range(0, len(updated_list), 2):
            k = updated_list[index:index + 2]
            #do you stuff with k[0] and k[1] before inserting to out list
            out.insert(len(out), k)


            for item in actual_list:
                out.insert(len(updated_list), item)

            updated_list = out

            return group(updated_list,actual_list[1:])






print(group(actual_list,actual_list[2:]))
输出:

['00', '01', '11', '10', '01']
[['00', '01'], '11', '10', '01']
[[['00', '01'], '11'], '10', '01']
[[[['00', '01'], '11'], '10'], '01']
[[[[['00', '01'], '11'], '10'], '01']]

经验法则通常是,在迭代列表时更改列表是危险的(而且不是Pythonic)。Python背后的一个想法是,开发人员的时间比处理时间更有价值,因此与其充分利用CPU,不如构建一个新的列表。它需要一些额外的周期(和内存),但更健壮。请发布一个包含输入和相应输出的示例。2.为什么要标记熊猫?3.使用已重命名(或未重命名)的导入时,请在标记
pandas
添加样本数据时包含导入语句。@Bharath I已更新。@TomaszPrzemski您希望输出是什么,因为对循环进行分析对于没有注释描述其作用的任何人来说都是痛苦的。@TomaszPrzemski始终:)
actual_list=['00', '01', '11', '10', '01']

def group(updated_list,actual_list):
    print(updated_list)  #This is just for showing output
    exit_condition = []
    for item in updated_list:

        if not isinstance(item,list):
            exit_condition.append(item)
    if not exit_condition:
        return 0
    else:
        out = []
        for index in range(0, len(updated_list), 2):
            k = updated_list[index:index + 2]
            #do you stuff with k[0] and k[1] before inserting to out list
            out.insert(len(out), k)


            for item in actual_list:
                out.insert(len(updated_list), item)

            updated_list = out

            return group(updated_list,actual_list[1:])






print(group(actual_list,actual_list[2:]))
['00', '01', '11', '10', '01']
[['00', '01'], '11', '10', '01']
[[['00', '01'], '11'], '10', '01']
[[[['00', '01'], '11'], '10'], '01']
[[[[['00', '01'], '11'], '10'], '01']]