理解一行代码

时间:2014-06-04 21:41:56

标签: python

我被其他人给了一行我无法理解的代码。

inputString = "[1,2,3,4,5,6,7,8,9,10,11,12]"

a = inputString[1:-1].split(',')
z = zip(a[::2],a[1::2]) # this line
print a
print z

我理解split函数及其运行方式。我甚至理解zip函数。我不明白的是a[::2],a(1::2)正在做什么。我已经尝试修改这些代码并获得不同的结果,但没有什么能让我理解修改代码的内容。我是Python的新手,可以使用一些帮助。

代码的典型未修改结果如下所示:

['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
[('1', '2'), ('3', '4'), ('5', '6'), ('7', '8'), ('9', '10'), ('11', '12')]

我正在努力获得' a'分成4组而不是2组,即:

('1','2','3','4'),('5','6','7','8')....etc.

2 个答案:

答案 0 :(得分:2)

z = zip(a[::2],a[1::2])

以上两行使用Explain Python's slice notation来逐步浏览列表aa[::2]告诉Python获取a中的所有其他项目。以下是演示:

>>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> lst[::2]  # Every other item (every item counting by 2's)
[1, 3, 5, 7, 9]
>>>

a[1::2]告诉Python从a开始,从索引1开始获取所有其他项目。以下是演示:

>>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> lst[1::2]  # Remember that Python indexes start at 0
[2, 4, 6, 8, 10]
>>>
然后

zip配对a[::2]a[1::2]返回的列表中的项目:

>>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> zip(lst[::2], lst[1::2])
[(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]
>>>

要获得示例中的四项元组,可以使用以下命令:

>>> inputString = "[1,2,3,4,5,6,7,8,9,10,11,12]"
>>> a = inputString[1:-1].split(',')
>>> zip(*[iter(a)]*4)
[('1', '2', '3', '4'), ('5', '6', '7', '8'), ('9', '10', '11', '12')]
>>>

您可能还想阅读:How does zip(*[iter(s)]*n) work in Python?

答案 1 :(得分:0)

如果你想要4元组,那么你需要使用4个参数和4步。

z = zip(a[::4], a[1::4], a[2::4], a[3::4])