Есть ли способ объединить все n элементов списка - PullRequest
0 голосов
/ 09 февраля 2020

Скажем, у меня есть список из 26 элементов, каждая из которых состоит из одной буквы алфавита, как показано ниже:

alphabets = ['a', 'b', ... , 'y', 'z']

Моя цель состоит в том, чтобы объединить каждые 5 элементов, получив, таким образом:

combined_strings = ['abcde', 'bcdef', ... 'vwxyz']

Я пробовал:

combined_strings = []
for i, k in enumerate(alphabets):
    temp_string = k[i] + k[i+1] + k[i+2] + k[i+3] + k[i+4]
    combined_strings.append(temp_string)

, но меня встречает IndexError: List index out of range

Ответы [ 4 ]

1 голос
/ 09 февраля 2020

Вы используете enumerate неправильно. enumerate дает и индекс, и элемент этого индекса, поэтому k[i] не имеет никакого смысла. Кроме того, повторение по всей длине приводит к IndexError, так как тогда вы будете получать доступ к элементам на 27, 28, 29, 30, которые не существуют.

Вы можете исправить свой код так:

combined_strings = []
for i in range(len(alphabets)-4):
    temp_string = alphabets[i] + alphabets[i+1] + alphabets[i+2] + alphabets[i+3] + alphabets[i+4]
    combined_strings.append(temp_string)
0 голосов
/ 09 февраля 2020

Попробуйте ниже этого.

import string
li = list(string.ascii_lowercase);
liRes = []
for i in range(0,22):
    liRes.append("".join(li[i:i+5]))
print(liRes)
0 голосов
/ 09 февраля 2020

вы идете слишком далеко в списке, ваше я буду go вплоть до i = 26, и тогда у вас нет 27-й, 28-й, 29-й или 30-й буквы

, вы могли бы сделать что-то вроде:

combined_strings = ["".join([alphabet[i], alphabet[i+1], alphabet[i+2], alphabet[i+3], alphabet[i+4]]) for i in range(len(alphabet) - 4)]
0 голосов
/ 09 февраля 2020

Для этой цели удобнее использовать строку, чем список, потому что вы можете нарезать строку для извлечения подстроки. Вы также можете импортировать ascii_lowercase из модуля string вместо того, чтобы записывать его самостоятельно.

>>> from string import ascii_lowercase as alphabet
>>> [ alphabet[i:i+5] for i in range(len(alphabet) - 4) ]
['abcde', 'bcdef', 'cdefg', 'defgh', 'efghi', 'fghij', 'ghijk', 'hijkl',
 'ijklm', 'jklmn', 'klmno', 'lmnop', 'mnopq', 'nopqr', 'opqrs', 'pqrst',
 'qrstu', 'rstuv', 'stuvw', 'tuvwx', 'uvwxy', 'vwxyz']

Обратите внимание, что диапазон должен составлять от go до len(alphabet) - 4 (эксклюзив), чтобы последняя подстрока имеет полную длину 5.

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