Python 获取给定多个字符串的所有可能字符串

Python 获取给定多个字符串的所有可能字符串,python,Python,我在不同的行上有多个字符串,我希望在不改变顺序的情况下获得所有可能的排列: 例如: er r er er er r 这将给我: er r er er er r er r r er er er 在python中有没有一种方法可以做到这一点?如果这是一个重复,请告知,但我无法找到一个 这与仅使用一个字符串的问题不同 更新[仍然不工作] import itertools with open(in_file) as f: lis = list(f) print (lis) print(

我在不同的行上有多个字符串,我希望在不改变顺序的情况下获得所有可能的排列:

例如:

er r er
er er r
这将给我:

er r er
er er r
er r r
er er er
在python中有没有一种方法可以做到这一点?如果这是一个重复,请告知,但我无法找到一个

这与仅使用一个字符串的问题不同

更新[仍然不工作]

import itertools

with open(in_file) as f:
    lis = list(f) 

print (lis)
print([' '.join(x) for x in itertools.product(*map(set, zip(*map(str.split, lis))))])
[错误]

[['er', 'r', 'er'], ['er', 'er', 'r']]
Traceback (most recent call last):
File "test.py", line 37, in <module>
print([' '.join(x) for x in itertools.product(*map(set, zip(*map(str.split, S))))])
TypeError: descriptor 'split' requires a 'str' object but received a 'list'

回溯(最近一次呼叫最后一次):
文件“test.py”,第37行,在
打印([''.join(x)for x in itertools.product(*map(set,zip(*map(str.split,S)))))
TypeError:描述符“split”需要一个“str”对象,但收到一个“list”

您可以
zip
拆分这些字符串,并获取cartesion
产品,例如:

>>> import itertools as it
>>> s1, s2 = 'er r er', 'er er r'
>>> {' '.join(x) for x in it.product(*zip(s1.split(), s2.split()))}
{'er er er', 'er er r', 'er r er', 'er r r'}
你可以得到这样的副本,构造成一个集

为任意数量的字符串更新:

>>> import itertools as it
>>> ss = ['er r er', 'er er r', 'ar er r']
>>> {' '.join(x) for x in it.product(*zip(*map(str.split, ss)))}
{'ar er er', 'ar er r', 'ar r er', 'ar r r', 'er er er', 'er er r', 'er r er', 'er r r'}
注意:您还可以将
集合
应用于
产品
的参数,以删除重复项,并且根据字符串的重叠情况,这可能会更快,例如:

>>> [' '.join(x) for x in it.product(*map(set, zip(*map(str.split, ss))))]
['er r r', 'er r er', 'er er r', 'er er er', 'ar r r', 'ar r er', 'ar er r', 'ar er er']
要读取文件类型对象,请执行以下操作:

>>> with open(in_file) as f:
...     lis = list(f)
>>> print([' '.join(x) for x in it.product(*map(set, zip(*map(str.split, lis))))])
['er r r', 'er r er', 'er er r', 'er er er']
或者更紧凑地说:

>>> with open(in_file) as f:
...     print([' '.join(x) for x in it.product(*map(set, zip(*map(str.split, f))))])
['er r r', 'er r er', 'er er r', 'er er er']

可能是@Kallz的副本,但这一个只有一个字符串,我可以这样做。。。问题是获取多个字符串之间的组合。能否在\u文件的
中显示数据?注意:您正在
split()
ing两次,
lis=list(f)
就足够了。当然,您可以直接将
f
放入
map()
中(并将
print
移动到
with
子句中)。或者你可以去掉
map()
,只使用
zip(*lis)
@AChampion文件中的内容与我的示例完全相同那么为什么要拆分两次呢?我想要一个不适用于两个字符串的示例,因为我可以有更多字符串。我会更新我的问题。请更新,因为这需要非凡的推理才能从你的问题中得出结论。注意:对于任意数量的字符串,这很容易更新。我得到的
zip()
是一个内置函数,它接受多个列表并返回所有第一个元素、所有第二个元素等的
元组的
迭代器
(或
list
py2)。我的想法是这样的:print('.join)(x代表x,在itertools.product中)我将字符串添加到一个列表中,希望能有所帮助