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

在子列表的开头和结尾创建包含元组的列表列表

在子列表的开头和结尾创建包含元组的列表列表

翻过高山走不出你 2021-07-12 12:46:05
我有一个类似这样的扁平化列表l = [(2.0000001192092896, 3.3999999761581421), [4, 3], (1.9999999701976776, 1.7999999821186066), (0.875, 1.125), [-1, 0], [-1, 4], (1.5, 3.5)].我想在开始和结束时创建一个包含元组的列表列表,如下所示:l' = [[(2.0000001192092896, 3.3999999761581421), [4, 3], (1.9999999701976776, 1.7999999821186066)],[(1.9999999701976776, 1.7999999821186066),(0.875, 1.125)], [(0.875, 1.125), [-1, 0], [-1, 4], (1.5, 3.5)],[(1.5, 3.5),(2.0000001192092896, 3.3999999761581421)]]l' 包含所有元组和它们之间的列表(如果有)。我试图使用以下代码执行相同的操作,但无法成功实现:full_list = []state = 0for ind,value in enumerate(l):    if isinstance(value, tuple):        if state == 0:            state = 1            inner_list = []            if ind == len(l) - 1:                k = 0            else:                k = ind + 1            j = l[k]            if isinstance(j,tuple):                full_list.append(inner_list)                inner_list.append(j)        else:            state = 0     inner_list.append(value)     print(full_list)   有人可以建议一些其他的选择吗?
查看完整描述

2 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

这似乎清理了一些东西。无需检查它是否是列表,因为也只有元组和列表。


l = [(2.0000001192092896, 3.3999999761581421), [4, 3], (1.9999999701976776, 1.7999999821186066), (0.875, 1.125), [-1, 0], [-1, 4], (1.5, 3.5)]

full_list = []

inner_list = []

for value in l:

    if isinstance(value, tuple):

        inner_list.append(value)

        if len(inner_list) > 0:

            full_list.append(inner_list)

            inner_list = []

    else:

        inner_list.append(value)


print(full_list)

这将打印:


[[(2.0000001192092896, 3.399999976158142), [4, 3], (1.9999999701976776, 1.7999999821186066)], [(0.875, 1.125), [-1, 0], [-1, 4], (1.5, 3.5)]]



查看完整回答
反对 回复 2021-07-28
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

取tuples存在的索引然后zip它们并使用列表理解为:


tup_index = [index for index,value in enumerate(l) if isinstance(value,tuple)]

full_list = [l[first:last+1] for first,last in zip(tup_index[::2],tup_index[1::2])]


print(full_list)


[[(2.0000001192092896, 3.399999976158142),[4, 3],(1.9999999701976776, 1.7999999821186066)],

 [(0.875, 1.125), [-1, 0], [-1, 4], (1.5, 3.5)]]

或者,如果列表包含奇数个元组,则:


if len(tup_index)%2==0:

    full_list = [l[first:last+1] for first,last in zip(tup_index[::2],tup_index[1::2])]

else:

    tup_index.append(len(l)+1)

    full_list = [l[first:last+1] for first,last in zip(tup_index[::2],tup_index[1::2])]


查看完整回答
反对 回复 2021-07-28
  • 2 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号