Условное объединение подсписков в списке - PullRequest
1 голос
/ 12 апреля 2019

У меня есть следующий список списков.

If last sublist has len>1:

x = [[0], [1, 2, 3], [4, 5], [6], [7, 8, 9], [10, 11, 12, 13], [15], [16, 17, 18]]

expected_output = [[0, 1, 2, 3], [4, 5], [6, 7, 8, 9], [10, 11, 12, 13], [15, 16, 17, 18]]

If last sublist has len==1:

x = [[0], [1, 2, 3], [4, 5], [6], [7, 8, 9], [10, 11, 12, 13], [15], [16, 17, 18], [19]]

expected_output = [[0, 1, 2, 3], [4, 5], [6, 7, 8, 9], [10, 11, 12, 13], [15, 16, 17, 18], [19]]

Я пытаюсь объединить подсписки длиной 1 со следующим подсписком.

Если длина последнего подсписка равна единице, я хочу оставить все как есть.

Я пытался написать следующий код.

xt = []
for i in range(len(x)-1):
    if len(x[i]) == 1:
        xt.append(x[i]+x[i+1])
#         del x[i+1]
    if len(x[i])>1:
        xt.append(x[i])
print(xt)

Ответы [ 2 ]

2 голосов
/ 12 апреля 2019

Попробуйте это:

def ref1(l):
    con = 0
    l2 = []
    while con<len(l)-1:
        if len(l[con])==1:
            l2.append(l[con]+l[con+1])
            con +=2
        else:
            l2.append(l[con])
            con+=1
    if len(l[-1])==1:
        l2.append(l[-1])
    print(l2)

ref1([[0], [1, 2, 3], [4, 5], [6], [7, 8, 9], [10, 11, 12, 13], [15], [16, 17, 18]])
# OUTPUT : [[0, 1, 2, 3], [4, 5], [6, 7, 8, 9], [10, 11, 12, 13], [15, 16, 17, 18]]

ref1([[0], [1, 2, 3], [4, 5], [6], [7, 8, 9], [10, 11, 12, 13], [15], [16, 17, 18], [19]])
# OUTPUT : [[0, 1, 2, 3], [4, 5], [6, 7, 8, 9], [10, 11, 12, 13], [15, 16, 17, 18], [19]]
1 голос
/ 12 апреля 2019

Анализ кода

xt = []
for i in range(len(x)-1):
    if len(x[i]) == 1:
        xt.append(x[i]+x[i+1])

Это означает, что вы добавляете следующий подсписок перед его посещением

#         del x[i+1]
    if len(x[i])>1:
        xt.append(x[i])

и у него нет истории, если подсписок уже был объединен.

print(xt)

Обратить

  • Обратитесь к списку наоборот и каждый раз проверяйте, имеет ли предыдущий список длину 1.

OR

  • Сохранить вкладку, если предыдущее действие было слиянием.

ДО OP

Если вам нужна дополнительная помощь, пожалуйста, кричите

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...