猿问

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

我有一个类似这样的扁平化列表


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 = 0

for 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)   

有人可以建议一些其他的选择吗?


翻过高山走不出你
浏览 179回答 2
2回答

眼眸繁星

这似乎清理了一些东西。无需检查它是否是列表,因为也只有元组和列表。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)]]

慕运维8079593

取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])]
随时随地看视频慕课网APP

相关分类

Python
我要回答