[英]Simple way to “mix” respectively two lists in python?
我有以下問題:
我需要在python中分別“混合”兩個列表...
我有這個:
names = open('contactos.txt')
numbers = open('numeros.txt')
names1 = []
numbers1= []
for line in numbers:
numberdata = line.strip()
numbers1.append(numberdata)
print numbers1
for line in names:
data = line.strip()
names1.append(data)
print names1
names.close()
numbers.close()
這首先打印300個數字,然后打印相應的300個名稱,我需要做的是創建一個新文件(txt),用一行打印名稱和數字,用逗號(,)分隔,如下所示:
Name1,64673635
Name2,63513635
Name3,67867635
Name4,12312635
Name5,78679635
Name6,63457635
Name7,68568635
..... and so on...
我希望你能幫助我做到這一點,我已嘗試過“for”但我不確定如何做到這一點,如果我一次迭代兩個列表,謝謝:)
利用zip
:
for num, name in zip(numbers, names):
print('{0}, {1}'.format(num, name))
zip
會將兩個列表組合在一起,讓您將它們寫入文件:
In [1]: l1 = ['one', 'two', 'three']
In [2]: l2 = [1, 2, 3]
In [3]: zip(l1, l2)
Out[3]: [('one', 1), ('two', 2), ('three', 3)]
但是你可以節省一點時間。 在您的代碼中,您將分別迭代每個文件,從每個文件創建一個列表。 您也可以同時迭代這兩個,在一次掃描中創建列表:
results = []
with open('contactos.txt') as c:
with open('numeros.txt') as n:
for line in c:
results.append([line.strip(), n.readline().strip()])
print results
這使用with
語句(上下文管理器),它基本上為您處理文件的關閉。 這將遍歷contactos
,從numeros
讀取一行並將該對添加到列表中。 您甚至可以刪除列表步驟並在同一循環中直接寫入第三個文件:
with open('output.txt', 'w') as output:
with open('contactos.txt', 'r') as c:
with open('numeros.txt', 'r') as n:
for line in c:
output.write('{0}, {1}\n'.format(line.strip(), n.readline().strip()))
以這種方式混合兩個列表的“pythonic”方式是zip功能!
names = open('contactos.txt')
numbers = open('numeros.txt')
names1 = []
numbers1= []
for line in numbers:
numberdata = line.strip()
numbers1.append(numberdata)
for line in names:
data = line.strip()
names1.append(data)
names.close()
numbers.close()
for name, number in zip(names1, numbers1):
print '%s, %s' % (name number)
還有其他更好的方法來打印格式化文本(例如Yuushi的答案)。 我也喜歡使用with
語句和列表推導,例如
with open('contactos.txt') as f:
names = [line.strip() for line in f]
with open('numeros.txt') as f:
numbers = [line.strip() for line in f]
for name, number in zip(names, numbers):
print '%s, %s' % (name, number)
最后,我只想評論如何在沒有zip功能的情況下完成它。 如果有不同數量的數字和名稱,我不確定你想要做什么,但你可以使用這樣的for
循環來獲取最后一位來在單個for循環中訪問兩個列表中的值:
for i in range(len(numbers)):
print '%s, %s' % (names[i], numbers[i])
如果名稱多於數字,則此代碼將拋出異常,因此您可能希望添加一些代碼來處理它。
全部一起:
import itertools
with open('contactos.txt') as names, open('numeros.txt') as numbers:
for num, name in itertools.izip(numbers, names):
print '%s, %s' % (num.strip(), name.strip())
這將並行讀取兩個文件,而不是一次一個地將每個文件完全讀入內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.