这是我正在查看的代码https://github.com/Katee/quietnet
在这个项目中,有一个名为prettynet.py
的文件在这个文件中,它就是。
def chunks(l, n):
for i in xrange(0, len(l), n):
yield l[i:i+n]
我不知道如何理解l[i:i+n]
的含义。
答案 0 :(得分:0)
:
是列表的切片运算符。
从此answer
a[start:end] # items start through end-1 a[start:] # items start through the rest of the array a[:end] # items from the beginning through end-1 a[:] # a copy of the whole array
所以,有一个例子
l = [1,2,3,4,5]
print l[1:3]
>> [2, 3]
答案 1 :(得分:0)
正在切片。因此,在该部分中,它将列表l
从i
切换为i+n-1
(包括索引i
中的元素,直到索引i+n-1
,但排除了元素index i+n
)
答案 2 :(得分:0)
l[i:i+n]
是slicing syntax,它从索引i
(包括)到索引i+n
(不包括)得到一个子序列。与索引不同,它从不引发异常;如果切片超出序列,则切片比您预期的短。
答案 3 :(得分:0)
表达式l[i:i+n]
返回一个数组l
的切片,特别是i
到i+n-1
的元素。这是一个生成器表达式,每次调用都会返回自上次调用以来数组中的下一个n
元素。
答案 4 :(得分:0)
这是一种名为slicing
的字符串格式。它涉及使用切片表示法:
切割字符串的一部分。以下是它的工作原理:
[starting_point:ending_point]
>>>l = [1,2,3,4,5]
>>>a = l[1:3]
>>>print a
[2,3,4]
一旦您知道这一点,代码就变得易于阅读。您正在将i
部分中的字符串切片为n
应该是的字符串。 n
显然也是范围随着每次迭代而跳跃的间隔。
您可以在此处阅读有关切片的更多信息:https://pythonhosted.org/bitstring/slicing.html
答案 5 :(得分:0)
该函数是一个生成器,它返回l
元素长的n
增量切片。
请考虑以下事项:
def chunks(l, n):
for i in xrange(0, len(l), n):
yield l[i:i+n]
a_list = [1,2,3,4,5,6,7,9,10,11,12,13,14]
for slice in chunks(a_list, 4):
print(slice)
产地:
[1, 2, 3, 4]
[5, 6, 7, 9]
[10, 11, 12, 13]
[14]
哪些是非重叠切片。这方面的技巧是切片表示法从起始索引中提取元素到(结束索引-1)。
答案 6 :(得分:0)
最简单的方法是尝试一些数据。例如,让我们列出一个清单:
>>> l = list("abcdefghijklmnopqrstuvwxyz")
>>> l
['a', 'b', 'c', 'd', 'e', 'f', ... 'x', 'y', 'z']
我缩短了列表,但它是你所期望的所有字母。现在尝试一下:
>>> list(chunks(l, 3))
[['a', 'b', 'c'],
['d', 'e', 'f'],
['g', 'h', 'i'],
['j', 'k', 'l'],
['m', 'n', 'o'],
['p', 'q', 'r'],
['s', 't', 'u'],
['v', 'w', 'x'],
['y', 'z']]
所以这里发生的事情是,当i
通过循环递增(一次跳过n
个元素)时,例程会产生下一个n
元素。原始清单。这种返回策略称为"生成器,"并且它由yield
声明发出信号。收益率类似于return
,但如果再次调用该例程,它将继续从最后一次停止的位置开始。"
另一种方法是循环:
>>> for c in chunks(l, 4):
>>> print c
['a', 'b', 'c', 'd']
['e', 'f', 'g', 'h']
['i', 'j', 'k', 'l']
['m', 'n', 'o', 'p']
['q', 'r', 's', 't']
['u', 'v', 'w', 'x']
['y', 'z']
每次循环,c
成为下一个" chunk"最初的可迭代的。从chunks
到循环的结果是原始列表l[i:i+n]
的一部分。在这种情况下,我要求n=4
,以便您可以看到差异。
当您学习如何使用enumerate
,chunks
和类似的生成器时,您会发现它们非常有用。参见例如itertools模块。