Python3:zip in range

时间:2016-05-18 18:57:03

标签: python python-3.x

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

但这不起作用。我试着查一查,但找不到任何东西。如果有人可以帮助我,我会很高兴的。

3 个答案:

答案 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')