Как перегруппировать вложенный список по определенным критериям? - PullRequest
0 голосов
/ 29 марта 2019

Я попытался установить линейное соединение, и у меня есть список:

cs = [[1,2,3,4],[1,2,4,5],[1,2,6,7],[3,4,5,6]]

b = [1,2,0,2,0,1,2]

Я сначала перегруппируюсь b как bb

bb = [[1,2],[0,2],[0,1,2]]

И я снова попытался перегруппировать bb, критерий, когда cs[u[i]][u[i+1]] > 3, перегруппировать его как другой подсписок.

u - это подсписок в bb

i является индексом u

Итак, желаемое значение:

output = [[1],[2],[0,2],[0,1],[2]]

Для первого подсписка в bb, cs[1][2] = 4 и> 3, поэтому перегруппируйте его как [1],[2]

Для третьего подсписка в bb, cs[0][1] < 3 and cs[1][2] >3, поэтому перегруппируйте его как [0,1],[2]

Как получить output в питоне?

1 Ответ

0 голосов
/ 29 марта 2019

Это не красиво, но это должно сделать работу за вас:

cs = [[1,2,3,4],[1,2,4,5],[1,2,6,7],[3,4,5,6]]
bb = [[1,2],[0,2],[0,1,2]]
# Make a copy of bb
cc = bb.copy()
# Set an index offset
ci = 0
# Iterate through list bb and alter cc if condition is met
for i in range(len(bb)):
    for j in range(len(bb[i])-1):
        if cs[bb[i][j]][bb[i][j+1]]>3:
# Insert the latter part of bb[i] at i+ci+1 before changing the value at i+ci 
            cc.insert(i+ci+1, bb[i][j+1:])
            cc[i+ci] = list(bb[i][:j+1])
# Increase the index offset by 1
            ci+=1
cc

Вывод, который я получил от этого, был: [[1], [2], [0, 2], [0, 1], [2]]

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