为了账号安全,请及时绑定邮箱和手机立即绑定

通过在每次出现给定值之前将列表打断,从列表中创建多个列表

通过在每次出现给定值之前将列表打断,从列表中创建多个列表

江户川乱折腾 2023-05-09 09:42:31
我正在尝试从下面的列表中创建多个列表:lst=[1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.,        0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.,        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,        0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.,        0., 0., 1., 0., 0., 1., 0., 0., 0., 0.]条件:在列表中的“1”之前中断并创建一个新列表。如下图所示:lst1= [1., 0., 0., 0., 0., 0., 0., 0., 0., 0.]lst2= [1., 0., 0., 0., 0., 0., 0.,0., 0., 0., 0., 0., 0., 0., 0.]lst3= [1., 0., 0., 0., 0., 0., 0., 0., 0.,0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., ]lst4=[1., 0., 0., 0., 0., 0., 0., 0., 0., 0.,0., 0.]
查看完整描述

4 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

列出补偿解决方案:


>>> [(a := [x]) for x in lst if x or a.append(x)]

[[1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],

 [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],

 [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],

 [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],

 [1.0, 0.0, 0.0],

 [1.0, 0.0, 0.0, 0.0, 0.0]]

Pre-Python-3.8 版本:


>>> [a for x in lst if x or a.append(x) for a in [[x]]]

[[1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],

 [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],

 [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],

 [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],

 [1.0, 0.0, 0.0],

 [1.0, 0.0, 0.0, 0.0, 0.0]]

(这也更简洁一些,因为a只存在于 list comp 期间,而不是之后。)


查看完整回答
反对 回复 2023-05-09
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

您可以使用 np.array 和 np.where


lst=[1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.,

0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.,

0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,

0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.,

0., 0., 1., 0., 0., 1., 0., 0., 0., 0.]


import numpy as np

Aux = np.array(lst + [1.])

Ones = np.where(Aux==1.)[0]


result = [ list(Aux[Ones[i]:Ones[i+1]]) for i in range(len(Ones)-1)]

print(result)


Out >>> [[1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 

        [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],

        [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],

        [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 

        [1.0, 0.0, 0.0], 

        [1.0, 0.0, 0.0, 0.0, 0.0]]


查看完整回答
反对 回复 2023-05-09
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

list_number = []

lst=[1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 1., 0., 0., 0., 0.]

for x in lst:

    if x==1:

        list_number.append([1])

    else:

        list_number[-1].append(x)


lst1, lst2, lst3, lst4, lst5, lst6 = list_number

简单的解决方案


查看完整回答
反对 回复 2023-05-09
?
繁星coding

TA贡献1797条经验 获得超4个赞

import numpy as np

lst=[1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.,

        0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.,

        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,

        0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.,

        0., 0., 1., 0., 0., 1., 0., 0., 0., 0.]

new_lst=[]

for i in lst:

     if i == 1:

          new_lst.append([])

     new_lst[-1].append(i)

     

#########print 

for i in new_lst:

     print(i)

输出


[1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

[1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

[1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

[1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

[1.0, 0.0, 0.0]

[1.0, 0.0, 0.0, 0.0, 0.0]


查看完整回答
反对 回复 2023-05-09
  • 4 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信