在不使用Python的zip函数的情况下并行迭代两个迭代器?

2024-09-28 23:20:15 发布

您现在位置:Python中文网/ 问答频道 /正文

在python中,并行迭代到迭代器的惯用方法是使用“zip”函数。在

Python 3.6.5 (default, Mar 31 2018, 19:45:04) [GCC] on linux
>>> it1 = range(0,5)
>>> it2 = range(3,10)
>>> for x1, x2 in zip(it1, it2): print('', x1, x2, sep='\t')
... 
        0       3
        1       4
        2       5
        3       6
        4       7
>>> it1 = range(0,5)
>>> it2 = range(3,10)
>>> [ 100*x1 + x2 for x1,x2 in zip(it1,it2) ]
[3, 104, 205, 306, 407]

但是,我不喜欢这里的模式,它将项的分配与压缩的iterable中的项的顺序分离:在更复杂的示例中,可能很容易产生错误,例如

^{pr2}$

因此,我想知道是否有一种模式,允许类似于

^{3}$

这样的错误会更加明显。在

对于列表理解,存在类似的语法,但是对应于itertools.product(),而不是{}。在


Tags: 方法函数indefaultfor错误模式range
2条回答

关于:

[100 * it1[i] + it2[i] for i in range(min(len(it1), len(it2)))]

如果你的条目是长度相等的列表,你可以用pandasDataFrame来完成你想要的。在

使用zip,可以执行以下操作:

l1 = ['a', 'b','c']
l2 = ['A','B','C']

result = [e1+' '+e2 for e1, e2 in zip(l1, l2)]
print(result)

然后得到

^{pr2}$

或者,您可以将两个列表合并成pd.DataFrame,如下所示:

df = pd.DataFrame({'l1': l1, 'l2':l2})

(请注意,您仍然需要为每个列表多使用一个名称,但是该行确实在l1旁边有'l1',这与zip的用法不同)。在

现在,您可以使用

result = [row['l1']+' '+row['l2'] for _, row in df.iterrows()]

结果是一样的。在

相关问题 更多 >