我是Python的新手,我试图将2个列表压缩成1,我已经能够做到了。我有2个列表,里面有几个东西,但是我要求用户输入一个数字,这应该决定了范围。 所以我得到了List1:A1,A2,A3,A4,A5,A6和List2:B1,B2,B3,B4,B5,B6 我知道如何显示2个完整列表,但我想要做的是,如果用户输入数字" 3",则zip应仅显示:(A1,B1),(A2 ,B2),(A3,B3)而不是整个列表。所以这就是我的尝试:
a = ["A1", "A2", "A3", "A4", "A5", "A6"]
b = ["B1", "B2", "B3", "B4", "B5", "B6"]
c = zip(a,b)
number = int(input("please enter number"))
for x in c:
print(x[:number])
但这不起作用。我试着查一查,但找不到任何东西。如果有人可以帮助我,我会很高兴的。
答案 0 :(得分:8)
您可以使用itertools.islice()
:
zip()
的结果进行切片
>>> from itertools import islice
>>> list(islice(c, number))
[('A1', 'B1'), ('A2', 'B2'), ('A3', 'B3')]
答案 1 :(得分:3)
这里不需要for
循环 - 您只需要执行一次尝试的操作。此外,zip
返回的生成器对象无法“下标”(使用[]
访问),因此您需要先使用list
将其转换为列表。
以下是一些有效的修改代码:
a = ["A1", "A2", "A3", "A4", "A5", "A6"]
b = ["B1", "B2", "B3", "B4", "B5", "B6"]
c = list(zip(a,b))
number = int(input("please enter number"))
print(c[:number])
使用和输出示例:
please enter number 3
[('A1', 'B1'), ('A2', 'B2'), ('A3', 'B3')]
答案 2 :(得分:3)
如有疑问,请使用print:
>>> a = ["A1", "A2", "A3", "A4", "A5", "A6"]
>>> b = ["B1", "B2", "B3", "B4", "B5", "B6"]
>>> c = zip(a,b)
>>> number = 3
>>> for x in c:
... print(x)
...
('A1', 'B1')
('A2', 'B2')
('A3', 'B3')
('A4', 'B4')
('A5', 'B5')
('A6', 'B6')
正如您所看到的,x
是一对,因此x[:number]
只显示该对的number
个第一项。
您真正想要做的是显示number
第一对:
>>> c = list(zip(a,b))
>>> print(c[:3])
[('A1', 'B1'), ('A2', 'B2'), ('A3', 'B3')]
(请注意,我对list()
返回的值使用了zip()
,因为zip
对象不可订阅)
如果你想迭代而不是像这样打印它们,那很简单:
>>> for x in c[:3]:
... print(x)
...
('A1', 'B1')
('A2', 'B2')
('A3', 'B3')