从python中的两个列表创建特定的对

时间:2018-05-17 08:08:12

标签: python list loops

我目前正在尝试从两个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等的所有文档我很困惑......

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

您可以通过将两个给定列表作为参数传递来使用zip方法。

要获得outl2列表,您应该使用zip方法接受两个argumentsl1列表,但撤消和{{ 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)

如果enumeratezip等首先使用简单的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']]