3 回答

TA貢獻1829條經(jīng)驗 獲得超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每個組合的項目數(shù)在哪里(在這種情況下,我們需要 2 個)
from itertools import permutations
with open('test.txt') as f:
for x, y in permutations(f.readlines(), 2):
print(x + y)
您還可以通過添加以下內(nèi)容來改進此代碼:
for x, y in permutations((x.rstrip('\n') + '\n' for x in f.readlines()), 2):
這里不需要列表理解,相反,我們可以使用生成器表達式,這對內(nèi)存更友好。
由于您在循環(huán)內(nèi)迭代每個排列for,因此您無需將其存儲為列表,這意味著您無需同時將所有排列存儲在內(nèi)存中,而是在您使用時計算它們他們。這同樣適用于生成器表達式,您不會將它與第一個代碼中的列表理解相反。

TA貢獻1868條經(jīng)驗 獲得超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條經(jīng)驗 獲得超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')
]
添加回答
舉報