3 回答
TA贡献1829条经验 获得超6个赞
如果你想尽可能接近你当前的代码,你应该使用file.readlines():
with open('test.txt') as f:
lines = f.readlines()
for i in lines:
for j in lines:
pw_n = i + j
print(pw_n)
另外,我建议更改lines = f.readlines()为:
lines = [x.rstrip('\n') + '\n' for x in f.readlines()]
该列表理解将强制所有单词以 a 结尾'\n'(在您的文件Russia中没有任何'\n'结尾,因此它在输出中的显示方式不同,这解决了这个问题)。
如果您正在寻找更好的代码,您应该使用itertools.permutations(iterable, r=None),r每个组合的项目数在哪里(在这种情况下,我们需要 2 个)
from itertools import permutations
with open('test.txt') as f:
for x, y in permutations(f.readlines(), 2):
print(x + y)
您还可以通过添加以下内容来改进此代码:
for x, y in permutations((x.rstrip('\n') + '\n' for x in f.readlines()), 2):
这里不需要列表理解,相反,我们可以使用生成器表达式,这对内存更友好。
由于您在循环内迭代每个排列for,因此您无需将其存储为列表,这意味着您无需同时将所有排列存储在内存中,而是在您使用时计算它们他们。这同样适用于生成器表达式,您不会将它与第一个代码中的列表理解相反。
TA贡献1868条经验 获得超4个赞
这是一种解决方案
with open('test.txt') as f:
lines = f.readlines()
for i, val in enumerate(lines):
for j in range(i+1, len(lines)):
print("%s%s" %(val, lines[j]))
print("")
TA贡献1871条经验 获得超8个赞
看看https://docs.python.org/3.4/library/itertools.html#itertools.permutations
>>> list(permutations(['USA', 'Canada', 'Mexico'], 2))
[
('USA', 'Canada'),
('USA', 'Mexico'),
('Canada', 'USA'),
('Canada', 'Mexico'),
('Mexico', 'USA'),
('Mexico', 'Canada')
]
添加回答
举报