在Python中:两个列表分别进行“混合”的简单方法?

2024-10-04 03:17:44 发布

您现在位置: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),在一行中打印名称和数字,用逗号(,)分隔,如下所示:

^{pr2}$

我希望你能帮我做这件事,我试过用“for”来做,但是如果我同时迭代两个列表,我不知道该怎么做,谢谢:)


Tags: intxt列表fordatanameslineopen
3条回答

利用zip

for num, name in zip(numbers, names):
    print('{0}, {1}'.format(num, name))

{cd1>将两个列表合并在一起:

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)]

不过,你可以节省一点时间。在代码中,您将分别迭代每个文件,从每个文件创建一个列表。您也可以同时迭代这两个选项,在一次扫描中创建列表:

^{pr2}$

这使用了一个with语句(上下文管理器),它实际上为您处理文件的关闭。这将遍历contactos,读取numeros中的一行,并将该对追加到列表中。您甚至可以省去列表步骤,在同一循环中直接写入第三个文件:

^{3}$

以这种方式混合两个列表的“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语句和列表理解,例如

^{pr2}$

最后,我只想评论一下,如果不使用zip函数,您将如何做到这一点。如果有不同数量的数字和名称,我不确定您要做什么,但是您可以在最后一位使用for循环,以便在单个for循环中访问两个列表中的值:

^{3}$

如果名称多于数字,此代码尤其会引发异常,因此您可能需要添加一些代码来处理该异常。在

相关问题 更多 >