拆开一个列表Python



如果我有一个列表:

X = [0, 2, 3, 4.0, 1, 0, 3, 0, 0, 0, 2, 1, 5, 2, 6, 0, 2.2, 1]

我如何用python编写代码来获取这个列表并找到连续正数的个数,然后创建一个列表,其中包含每个连续数字的列表。

例如

这个x的例子将返回一个数字4它还会返回:

[[ 2, 3, 4.0, 1], [3], [ 2, 1, 5, 2, 6], [ 2.2, 1]]. 

我写这个是为了找到所有的零,但我不知道从那里去哪里:

 zeros = []
 for i in range(0,len(World)):
      if z[i]==0: 
          zeros.append(i)

不需要细化零。您可以简单地遍历列表并将正数放入临时列表中,直到遇到零为止,但是对于此类任务,您可以使用itertools作为更python的方法。groupby :

>>> from itertools import groupby
>>> [list(g) for k,g in groupby(X,key=lambda x:x>0) if k]
[[2, 3, 4.0, 1], [3], [2, 1, 5, 2, 6], [2.2, 1]]

如果你想在没有itertools模块的情况下做到这一点,你可以使用以下函数,该函数基于前面的解释工作,每次遇到零时产生临时列表,最后返回一个生成器包含正数列表,您可以通过调用list函数将其转换为列表:

>>> def grouper(li,temp=[]):
...    for i in li:
...        if i>0:
...           temp.append(i)
...        else:
...            if temp: yield temp
...            temp=[]
...    if temp : yield temp
...
演示:

>>> list(grouper(X))
[[2, 3, 4.0, 1], [3], [2, 1, 5, 2, 6], [2.2, 1]]

您不需要事先找出0的索引。您可以简单地保留另一个临时列表,其中包含自上次遇到0以来的正(大于0)值。然后当你遇到0时,把那个临时列表附加到结果列表中,然后把那个临时列表改成一个新列表。例子——

result = []
temp = []
for i in X:
    if i <= 0:
        if temp:
            result.append(temp)
            temp = []
    else:
        temp.append(i)
if temp:
    result.append(temp)
——

演示

>>> result = []
>>> temp = []
>>> for i in X:
...     if i <= 0:
...         if temp:
...             result.append(temp)
...             temp = []
...     else:
...         temp.append(i)
...
>>> if temp:
...     result.append(temp)
...
>>> result
[[2, 3, 4.0, 1], [3], [2, 1, 5, 2, 6], [2.2, 1]]

相关内容

  • 没有找到相关文章

最新更新