如何从两个列表的笛卡尔乘积连接字符串

2024-09-27 07:29:49 发布

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

我有两个字符串列表:

letters = ['abc', 'def', 'ghi']
numbers = ['123', '456']

我想对它们进行for循环,以创建一个不是并行的字符串列表,因此zip()在这里不起作用

预期结果:

result = ['abc123', 'def123', 'ghi123', 'abc456', 'def456', 'ghi456']

结果中元素的顺序是不相关的

有什么想法吗


Tags: 字符串列表fordefresultzipabcnumbers
3条回答

谢谢你的回答!我简化了这个例子,所以上面所有的解决方案都很好地工作,但是在我正在处理的实际问题中,我想在这两个列表之间添加更多的代码行。我完成了嵌套这些循环:

for letter in letters:
   for number in numbers:
      print(letter+number)
      # many many lines of more code

无论如何,非常感谢你的帮助

numbersletters的乘积(而不是lettersnumbers),然后按相反的顺序连接生成的元组

>>> from itertools import product
>>> [''.join([y, x]) for x, y in product(numbers, letters)]
['abc123', 'def123', 'ghi123', 'abc456', 'def456', 'ghi456']

对于2元组,y + x就足够了,而不是使用''.join

两个列表的乘积就是所有可能的元组的集合,这些元组的创建顺序是从第一个列表中获取一个元素,从第二个列表中获取一个元素

>>> list(product(numbers, letters))
[('123', 'abc'), ('123', 'def'), ('123', 'ghi'), ('456', 'abc'), ('456', 'def'), ('456', 'ghi')]

您可以使用两个嵌套的for循环numbersletters尝试列表理解

print([l+n for n in numbers for l in letters])
# ['abc123', 'def123', 'ghi123', 'abc456', 'def456', 'ghi456']

也可以对循环使用嵌套的

out = []
for n in numbers:
    for l in letters:
        out.append(l+n)
print(out)
# ['abc123', 'def123', 'ghi123', 'abc456', 'def456', 'ghi456']

有关列表理解的更多详细信息,请参见doc或此related topic

相关问题 更多 >

    热门问题