Создать список списков, содержащих кортежи в начале и конце подсписка - PullRequest
0 голосов
/ 24 октября 2018

У меня сплюснутый список l что-то вроде этого

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)   

Может кто-нибудь предложить некоторыедругая альтернатива?

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Кажется, это немного проясняет ситуацию.Нет необходимости проверять, является ли это список, так как существуют только кортежи и списки таким же образом.

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)]]
0 голосов
/ 24 октября 2018

Возьмите индексы, где присутствует 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])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...