Создание списка, где каждый список [j] является символом j из каждого элемента в другом списке строк - PullRequest
1 голос
/ 08 октября 2019

Например:

list1 = ['abc','def','ghi','jk'`] 
output is : list2 = ['adgj','behk','cfi']

Обычно каждый элемент i в list2 должен быть i-м символом в каждом элементе list1.

Я знаю, что общий формат будет примерно таким же, как при создании list2 со следующим элементом до конца каждого.

[list1[0][0]
[list1[0][1]
[list1[0][2]

....

Однако, когда я пытаюсь создать цикл for, он говорит, что у меня нет индекса, и я также пытаюсь остановить остановку индекса, если последний элемент в списке list1 имеет меньший размер, чем остальные элементы. Мне просто нужно какое-то руководство о том, как настроить циклы for?

for I in range(Len(list1)):
  list2[I]=list1[I][0]

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

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

Вы можете сделать это, используя itertools.zip_longest, как указано в комментариях @juanpa.arrivillaga:

list(map(''.join, zip_longest(*list1, fillvalue='')))

Или вручную:

result = [''] * max(map(len, list1))
for i in range(len(result)):
    for s in list1:
      if i  < len(s):  result[i] += s[i]
0 голосов
/ 08 октября 2019

Вы можете сделать что-то вроде этого:

list1 = ['abc','def','ghi','jk']

max_length = max(map(len, list1))

result = []
for i in range(max_length):
    element = []
    for s in list1:
        element.append(s[i] if i < len(s) else "")
    result.append(''.join(element))

print(result)

Внешний цикл перебирает все возможные индексы, внутренний цикл перебирает слова, строка:

s[i] if i < len(s) else ""

извлекаетs[i] если я в границах. Хотя самый питонический (как упомянуто @ juanpa.arrivillaga) способ заключается в следующем:

from itertools import zip_longest

list1 = ['abc', 'def', 'ghi', 'jk']

result = list(map(''.join, zip_longest(*list1, fillvalue='')))

print(result)

Вывод

['adgj', 'behk', 'cfi']

Хотяпоследнее является немного продвинутым решением.

...