Python中的字符串列表乘法
初学者问题: 如果我有两个只包含字符串的列表,如何将它们连接到第三个列表中,该列表包含所有元素+一个列表中的每个元素+另一个列表中的每个元素?我曾经考虑过for循环,但是没有更简单的方法吗? 例如: 编辑:谢谢大家的回复,但我没有充分说明我想做好什么。 每个列表中的字符串数应该是不确定的,每个单词都必须与其他单词连接,但不能仅以x+y的形式。Python中的字符串列表乘法,python,arrays,list,multiplication,Python,Arrays,List,Multiplication,初学者问题: 如果我有两个只包含字符串的列表,如何将它们连接到第三个列表中,该列表包含所有元素+一个列表中的每个元素+另一个列表中的每个元素?我曾经考虑过for循环,但是没有更简单的方法吗? 例如: 编辑:谢谢大家的回复,但我没有充分说明我想做好什么。 每个列表中的字符串数应该是不确定的,每个单词都必须与其他单词连接,但不能仅以x+y的形式。 我还想把它连接到其他单词。与u=x+y+z类似,如果不导入itertools,也可以在访问listone和listtwo的元素时使用字符串连接,如下所示:
我还想把它连接到其他单词。与u=x+y+z类似,如果不导入itertools,也可以在访问listone和listtwo的元素时使用字符串连接,如下所示:
或者如果你想用手做,我会这样做:
l = ["a","b"]
l2 = ["c","d"]
l3 = l + l2
print(l3)
for x, y in zip(l,l2):
l3.append(x+y)
print(l3)
我不知道这是否是最优的方法。您可以使用笛卡尔积并加入。试试这个:
import itertools
listone = ['cat', 'dog' ]
listtwo = ['bin', 'sun']
listone + listtwo + list(''.join(e) for e in itertools.product(listone, listtwo))
结果:
['cat', 'dog', 'bin', 'sun', 'catbin', 'catsun', 'dogbin', 'dogsun']
这应该可以完成任务
In [29]: import itertools
In [30]: listone = ['cat', 'dog' ]
...: listtwo = ['bin', 'sun']
In [31]: output = listone + listtwo + [ "".join(items) for items in list(itertools.product(listone, listtwo))]
In [32]: output
Out[32]: ['cat', 'dog', 'bin', 'sun', 'catbin', 'catsun', 'dogbin', 'dogsun']
你也可以不用itertools来做
In [33]: output = listone + listtwo + [ item_one+item_two for item_one in listone for item_two in listtwo]
In [34]: output
Out[34]: ['cat', 'dog', 'bin', 'sun', 'catbin', 'catsun', 'dogbin', 'dogsun']
如果使用以下方法,则可以使用相对简单的代码获得此结果:
如果您只寻找组合,即x+y、x+y+z,而不是y+x或z+y+x,则可以使用itertools中的组合函数来形成电源组:
from itertools import combinations
words = listone+listtwo
result = ["".join(c) for r in range(1,len(words)+1) for c in combinations(words, r)]
print(result)
# ['cat', 'dog', 'bin', 'sun', 'catdog', 'catbin', 'catsun', 'dogbin',
# 'dogsun', 'binsun', 'catdogbin', 'catdogsun', 'catbinsun', 'dogbinsun',
# 'catdogbinsun']
注意:组合幂集随源项数呈指数增长:2^n-1
如果您想获得置换,请使用itertools中的置换替换组合。这将产生比组合多一个数量级的元素我知道您不想导入库。但这是什么?你不能为循环编写吗?@mamun在问这个问题时说他已经考虑过使用for循环,所以他只提供了两个列表,这是一个没有循环的替代方案。您还可以轻松地将其转换为更多元素的循环。如何处理两个以上的元素?简单示例:我希望['a'、'b'、'c']和['c'、'd'、'e']也返回[…..'ab'、'ac'、'abc'、'abcde'、'cd'、ce等等]@Kodeeo将此作为另一个SO发布,我会回答它。它需要组合。谢谢
In [33]: output = listone + listtwo + [ item_one+item_two for item_one in listone for item_two in listtwo]
In [34]: output
Out[34]: ['cat', 'dog', 'bin', 'sun', 'catbin', 'catsun', 'dogbin', 'dogsun']
listone = ['cat', 'dog' ]
listtwo = ['bin', 'sun']
result_list = listone + listtwo + [x + y for x in listone for y in listtwo]
from itertools import combinations
words = listone+listtwo
result = ["".join(c) for r in range(1,len(words)+1) for c in combinations(words, r)]
print(result)
# ['cat', 'dog', 'bin', 'sun', 'catdog', 'catbin', 'catsun', 'dogbin',
# 'dogsun', 'binsun', 'catdogbin', 'catdogsun', 'catbinsun', 'dogbinsun',
# 'catdogbinsun']