我目前正在尝试从两个python列表中创建特定的对:
Input:
l1 = ["fc1", "fc2"]
l2 = ["fh1", "fh2"]
Expected output:
outl1 = [["fc1","fh1"],["fc2","fh2"]]
outl2 = [["fc2","fh1"],["fc1","fh2"]]
你会从这个例子中猜到,“fc *”必须与“fh *”匹配,并且列表的任何出现都不能在最终输出中重复。
我必须承认,如果在网上找到关于zip,enumerate,itertools等的所有文档我很困惑......
非常感谢您的帮助。
答案 0 :(得分:2)
您可以通过将两个给定列表作为参数传递来使用zip
方法。
要获得outl2
列表,您应该使用zip
方法接受两个arguments
:l1
列表,但撤消和{{ 1}}列表。
l2
方法使每个迭代中的聚合元素成为迭代器。
换句话说, zip 会返回元组的zip
,其中 i-th 元组包含元素或 iterables 。
iterator
输出
l1 = ["fc1", "fc2"]
l2 = ["fh1", "fh2"]
print([[a,b] for a,b in zip(l1,l2)])
print([[a,b] for a,b in zip(reversed(l1),l2)])
答案 1 :(得分:2)
如果我理解你是正确的,你想要创建所有可能的对列表('fci','fhj'),这样在每个列表中所有'fci'只出现一次,而'fhj'则相同。< / p>
您可以使用itertools.permuations
来实现此目的。我将您的示例概括为每个列表包含3个元素。
from itertools import permutations
A = ["fc1", "fc2", "fc3"]
B = ["fh1", "fh2", "fh3"]
B_permuations = permutations(B)
for perm in B_permuations:
print([[a, b] for a, b in zip(A, perm)])
这会给你
[['fc1', 'fh1'], ['fc2', 'fh2'], ['fc3', 'fh3']]
[['fc1', 'fh1'], ['fc2', 'fh3'], ['fc3', 'fh2']]
[['fc1', 'fh2'], ['fc2', 'fh1'], ['fc3', 'fh3']]
[['fc1', 'fh2'], ['fc2', 'fh3'], ['fc3', 'fh1']]
[['fc1', 'fh3'], ['fc2', 'fh1'], ['fc3', 'fh2']]
[['fc1', 'fh3'], ['fc2', 'fh2'], ['fc3', 'fh1']]
答案 2 :(得分:0)
如果enumerate
,zip
等首先使用简单的for
循环
l1 = ["fc1", "fc2"]
l2 = ["fh1", "fh2"]
a = []
for i1 in l1:
a.append([[i1,i2] for i2 in l2])
for i in a:
print(i)
输出
[['fc1', 'fh1'], ['fc1', 'fh2']]
[['fc2', 'fh1'], ['fc2', 'fh2']]