Разделение списка списков на меньшие списки - PullRequest
1 голос
/ 07 июня 2019

У меня есть список списков:

ex = [['1001'],['0010'],['1101'],['0000']]

Я хочу разделить этот список списков на меньшие списки.И у меня есть другой список, который состоит из индексов, где я хочу сделать разделение:

track = [1,3]

Поэтому я хочу разделить этот список списков, чтобы получить следующий результат:

sublist = [
    [[1,0],[0,0],[1,1],[0,0]],
    [[0,1],[1,0],[0,1],[0,0]]
    ]

Я пробовал это на простом списке:

ex = [1,0,0,1]
start = 0
position = []
for i in track:
    position.append(ex[start:i+1])
    start = i+1

Но в этом случае мой список уже содержит целое число, тогда как в исходном списке есть строки.

Как я могу добиться этого в списке списка, в котором есть строки вместо целых чисел?Я не совсем знаю, с чего начать?

Ответы [ 3 ]

1 голос
/ 07 июня 2019

Вы, кажется, хотите разделить числа на цифры и поместить первые две и последние две цифры каждого числа в отдельный список в результате - вот вам:

# what you got
ex = [['1001'],['0010'],['1101'],['0000']]

# what you want
sublist = [[[1,0],[0,0],[1,1],[0,0]],
           [[0,1],[1,0],[0,1],[0,0]]]

# how to get there: create single integers from each string
# list comprehension, see below for answers about them
digits = [ list(map(int,l)) for inner in ex for l in inner] 
print(digits )

# create the results 
result = [ [],[] ]

for inner in digits:
    result[ 0].append( inner[:2] )   # list slicing, see below for answers about it
    result[-1].append( inner[2:] )

print(result)

Вывод (переформатирован):

# split into digits
[[1, 0, 0, 1], [0, 0, 1, 0], [1, 1, 0, 1], [0, 0, 0, 0]]

# put into results
[[[1, 0], [0, 0], [1, 1], [0, 0]],
 [[0, 1], [1, 0], [0, 1], [0, 0]]]

Встроенные функции помогут вам объяснить map () и другие полезные функции. Также интересно почитать:

0 голосов
/ 07 июня 2019
import itertools
import sys

ex = [['1001'], ['0010'], ['1101'], ['0000']]
track = [1, 3]

# [a,b)
it = itertools.chain(map(lambda x: x - 1, track), [sys.maxsize])
last = next(it, None)
result = []
for curr in it:
    temp = []
    for s in itertools.chain.from_iterable(ex):
        temp.append(list(map(int, s[last:curr])))
    result.append(temp)
    last = curr

print(result)

0 голосов
/ 07 июня 2019
  • sublist - окончательный список. subsublist рассматривается как промежуточный временный список.
  • track это внешняя петля
  • ex это внутренний цикл

ex = [['1001'],['0010'],['1101'],['0000']]
track = [1,3]
subsublist = []
sublist = []
start=0

for index in track:
    # print(index)
    if start == 0:
        end=index+1
    else:
        end=None
    for item in ex:
        subsublist.append([item[0][start:end]])
    sublist.append(subsublist)
    start=end
    subsublist = []

print(sublist)

[ОБНОВЛЕНИЕ] Еще одна попытка сделать код немного универсальным!

ex = [['100190'],['001099'],['110187'],['000050']]
tracks = [1,3,6]
subsublist = []
sublist = []
start=0

for track in tracks:
    indexOfTrack = tracks.index(track)
    if indexOfTrack == 0:
        end=track+1
    elif indexOfTrack > 0 and indexOfTrack < len(tracks)-1:
        end = track+1
    else:
        end=None
    for item in ex:
        subsublist.append([item[0][start:end]])
    sublist.append(subsublist)
    start=end
    subsublist = []

print(sublist)
...