【问题标题】:How to use zip not knowing the list name如何在不知道列表名称的情况下使用 zip
【发布时间】:2018-04-21 00:01:20
【问题描述】:

我正在尝试遍历命令行参数并打开给定的文件。我尝试使用lines = file.readlines() 读取行,然后使用 zip 组合项目。但是我不知道列表名称不知道该怎么做。 这是我的代码:

import sys
import os
index = 1
while index < len(sys.argv):
    if os.path.exists(sys.argv[index]) == True:
        with open(sys.argv[index], 'r') as file:
            lines = file.readlines()
            #zip lines in files
        index = index + 1

而文件的内容是:

文件 1:

12

27

59

文件 2:

21

72

95

【问题讨论】:

  • 请分享预期的输入和您的一些代码。
  • 我已经添加了我的代码。你能帮忙吗?非常感谢。
  • 您能在您希望传递的命令行参数上发布一个示例吗?
  • 命令行参数将给出文件名。
  • 您是要压缩一个文件的行,还是所有文件的所有行?如果你有一个包含你想要压缩的东西的迭代,你可以使用解包填充参数:zip(*lines)

标签: python-3.x list zip readlines


【解决方案1】:

在这种方法中,您遍历每个参数,并附加到一个列表中,在每个文件的末尾,它将附加到一个新列表中,您最终会得到一个列表列表

import sys
import os
container = []
for document in sys.argv[1:]:
    if os.path.exists(document):
        aux = []
        with open(document, 'r') as file:
            for line in file:
                aux.append(line.replace('\n',''))
    container.append(aux)
print(*zip(*container))

然后你可以解压列表并压缩它,我手动替换行的跳转,做任何你想做的事情。 ;)

文件 1 包含

7
1
3
5
6
3

文件 2 包含

11
12
13
14
15

输入

python test.py test1.txt test2.txt

输出

('7', '11') ('1', '12') ('3', '13') ('5', '14') ('6', '15')

编辑

在“print(*zip(*container))”这一行中,我们正在解压容器,它是一个包含列表的列表,当我们压缩它时,正如您在压缩某些东西时可能知道的那样,一个 zip 对象被创建,这是一个可迭代的,以便“解压缩”它并将其表示为一组元组,您使用 * (starred expression) 将其解包,例如:

>>> a = zip([1,2,3,4,5], [5,4,3,2,1])
>>> print(a)
<zip object at 0x00000219ECE8C408>
>>> print(*a)
(1, 5) (2, 4) (3, 3) (4, 2) (5, 1) 

【讨论】:

  • 感谢您的帮助。但是 *zip(*container) 是什么意思呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
  • 2016-11-10
  • 2021-01-05
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
相关资源
最近更新 更多