如何在Python中将列表切片成连续的非零整数组
我在网上找不到相关的信息,也自己搞不明白,所以想请教一下:
我该怎么把一个列表切分成连续的非零整数的片段呢?比如说:
data = [3, 7, 4, 0, 1, 3, 7]
我想得到的结果是:
slices = [[3, 7, 4], [1, 3, 7]]
我尝试了各种方法来遍历这个列表,最近在考虑用一个生成器来告诉我连续的组是从哪里开始和结束的,方法是检查前面或后面是否有0,但我现在有点卡住了。
5 个回答
3
在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在另一个地方使用这些数据。这个过程就像是把水从一个水桶倒到另一个水桶里。我们需要确保水不会洒出来,也就是要确保数据在转移过程中不会丢失或出错。
为了做到这一点,程序员会使用一些工具和方法来帮助他们管理这些数据。就像在厨房里使用量杯来准确测量水的量一样,程序员会使用变量、函数和其他编程概念来确保他们处理的数据是正确的。
有时候,程序员还需要让程序在特定的条件下运行,比如只有在满足某些条件时才执行某段代码。这就像是在下雨的时候才带伞一样,程序员会使用“如果”语句来判断条件是否满足。
总之,编程就像是在做一项复杂的任务,需要仔细计划和执行,以确保每一步都能顺利完成。
def split_on_zero(data):
start = 0
for (i, n) in enumerate(data):
if n == 0:
yield data[start:i]
start = i + 1
yield data[start:]
>>> list(split_on_zero([3, 7, 4, 0, 1, 3, 7]))
[[3, 7, 4], [1, 3, 7]]
>>> list(split_on_zero([0, 1, 2, 0, 3, 4, 5, 0]))
[[], [1, 2], [3, 4, 5], []]
6
看看这个链接:itertools.groupby。
>>> data = [3, 7, 4, 0, 1, 3, 7, 4, 0, 5]
>>> a=[list(i[1]) for i in itertools.groupby(data, key=lambda i:i==0)]
>>> a
[[3, 7, 4], [0], [1, 3, 7, 4], [0], [5]]
>>> [i for i in a if i != [0]]
[[3, 7, 4], [1, 3, 7, 4], [5]]
15
在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这些问题可能是因为我们写的代码有小错误,或者是我们没有理解某些概念。
当我们在网上寻找解决方案时,像StackOverflow这样的网站就非常有用。在这些网站上,很多人会分享他们遇到的问题和解决办法。你可以在这里找到其他程序员的经验和建议,这对学习编程非常有帮助。
总之,编程的过程中遇到问题是很正常的,重要的是要学会如何寻找帮助和解决问题。
import itertools
[ list(x[1]) for x in itertools.groupby(data, lambda x: x == 0) if not x[0] ]