[英]Divide a Python list every n-element
其实很简单。 只需遵循两个循环的值:
从外部循环开始, r
将是0
,然后是1
,然后是2
,等等。让我们看看r == 1
的情况。 当运行i
的不同值时(即0, 1, 2, ... len(lst)
, i % 4
的值,即i
除以4
的余数将为0, 1, 2, 3, 0, 1, 2, 3, ...
因此,对于 i 的每 4 个值, i
i % 4
将等于r
!
对于我们选择的r == 1
,这意味着我们选择lst[1], lst[5], lst[9], ...
等。
对于r == 2
? 你猜对了! 你会拿起lst[2], lst[6], lst[10],...
。
所以总的来说,你会得到 4 个列表,其中原始列表的元素不重叠,每次只需“跳跃”4 个元素,但从不同的值开始。
这自然会导致更简单的解决方案:
def even_divide(lst, num_piece=4):
return [lst[r::num_piece] for r in range(num_piece)]
有人可以帮我理解吗?
当然。 这是一个列表理解。 列表推导接受一个列表并对列表中的每个元素执行某些操作:假设我想将列表中的每个元素乘以 2:
new_list = [element*2 for element in my_list]
使它成为列表理解的是括号语法。 对于那些不熟悉它的人来说,这通常是需要一点时间来适应的部分。 话虽如此,我认为这就是让您难以理解问题中的代码的原因,因为您在列表理解中具有列表理解。 现在可能很难理解,但列表推导在 python 中是一件很棒的事情。
但是,正如这篇文章所提到的,有很多关于列表理解、lambda、map、reduce 和 filter 的讨论。 最终,由您决定什么最适合您的项目。 除了列表推导之外,我不喜欢其他任何东西,所以我虔诚地使用它们。
根据您链接的问题,列表理解采用长度 x 的一维列表并将其转换为(长度 x,宽度 y)的二维列表。 这就像numpy.reshape 。
而且...有没有办法重写该代码[以]更容易?
我不会推荐它。 列表推导被认为是非常 Python 的,你会在任何地方看到它们。 最好使用它们并习惯它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.