Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的字符串列表乘法_Python_Arrays_List_Multiplication - Fatal编程技术网

Python中的字符串列表乘法

Python中的字符串列表乘法,python,arrays,list,multiplication,Python,Arrays,List,Multiplication,初学者问题: 如果我有两个只包含字符串的列表,如何将它们连接到第三个列表中,该列表包含所有元素+一个列表中的每个元素+另一个列表中的每个元素?我曾经考虑过for循环,但是没有更简单的方法吗? 例如: 编辑:谢谢大家的回复,但我没有充分说明我想做好什么。 每个列表中的字符串数应该是不确定的,每个单词都必须与其他单词连接,但不能仅以x+y的形式。 我还想把它连接到其他单词。与u=x+y+z类似,如果不导入itertools,也可以在访问listone和listtwo的元素时使用字符串连接,如下所示:

初学者问题: 如果我有两个只包含字符串的列表,如何将它们连接到第三个列表中,该列表包含所有元素+一个列表中的每个元素+另一个列表中的每个元素?我曾经考虑过for循环,但是没有更简单的方法吗? 例如:

编辑:谢谢大家的回复,但我没有充分说明我想做好什么。 每个列表中的字符串数应该是不确定的,每个单词都必须与其他单词连接,但不能仅以x+y的形式。
我还想把它连接到其他单词。与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']