#python #string #list
#python #строка #Список
Вопрос:
Предположим, у меня есть
lists = ["ABC","AC","CCCC","BC"]
Я хочу новый список, в котором элементы в моем новом списке сгруппированы по позициям на основе lists
значения для каждой строки в списке, занимают позицию 0 (позиция «ABC» 0 равна «A») и создают из нее строку.
position = ["AACB","BCCC","CC","C"]
Я пытаюсь:
for i in range(0,4):
want = [lists[i] for stuff in lists]
и я получаю
IndexError: string index out of range
Что имеет смысл, потому что все строки имеют разный размер. Кто-нибудь может помочь?
Комментарии:
1. Ваш вопрос не имеет никакого смысла. Пожалуйста, уточните это, чтобы я мог помочь.
2. Я понятия не имею, что вы пытаетесь сделать, но ошибка, которую вы получаете, вызвана попыткой доступа к спискам [2] (третий элемент) в списке из 2 элементов.
3. Я предполагаю, что если у вас была третья строка BC, ваш ожидаемый результат [«AAB», «BBC», «C»]?
4. Для чего нужен желаемый результат
["ABC","AC","BCD"]
?5. Разве вывод не должен быть
['AA', 'BC', 'C']
?
Ответ №1:
Я думаю, вам может понадобиться это:
import itertools
lists = ["ABC","AC","CCCC","BC"]
position = map(''.join,itertools.izip_longest(*lists, fillvalue=''))
и вы получаете:
['AACB', 'BCCC', 'CC', 'C']
редактировать: теперь с новым примером…
Комментарии:
1. То, что хочет OP, и то, что он говорит, что хочет, иногда две разные вещи.
2. есть ли более простой способ сделать это без itertools?
3. @user2801122 способ смотреть дареному коню в зубы. Почему бы не сделать свою собственную попытку? Например, вы могли
try
бы для каждого ввода выполнять итерации иpass
далееIndexError
.
Ответ №2:
Вы можете использовать это понимание списка:
>>> lists = ["ABC","AC","CCCC","BC"]
>>> [''.join([s[i:i 1] for s in lists]) for i, el in enumerate(lists)]
['AACB', 'BCCC', 'CC', 'C']
Использование нотации среза предотвращает ошибки индексации для несуществующих элементов.