Разбиение списка строк на подсписки по их длине - PullRequest
1 голос
/ 30 марта 2019

Если, например, у меня есть список

['My', 'Is', 'Name', 'Hello', 'William']

Как я могу манипулировать им, чтобы я мог создать новый список

[['My', 'Is'], ['Name'], ['Hello'], ['William']]


Ответы [ 4 ]

6 голосов
/ 30 марта 2019

Вы можете использовать itertools. groupby :

>>> from itertools import groupby
>>> l = ['My', 'Is', 'Name', 'Hello', 'William']
>>> [list(g) for k, g in groupby(l, key=len)]
[['My', 'Is'], ['Name'], ['Hello'], ['William']]

Если, однако, список еще не отсортирован по длине, вам нужно сначала отсортировать его, как указано в комментариях @ recnac :

>>> l2 = ['My', 'Name', 'Hello', 'Is', 'William']
>>> [list(g) for k, g in groupby(sorted(l2, key=len), key=len)]
[['My', 'Is'], ['Name'], ['Hello'], ['William']]
2 голосов
/ 30 марта 2019

Привет, ребята. Я также нашел решение, хотя оно не самое лаконичное, я подумал, что стоит поделиться

data = ['My', 'Is', 'Name', 'Hello', 'William']
dict0 = {}
for index in data:
    if len(index) not in dict0:
        dict0[len(index)] = [index]
    elif len(index) in dict0:
        dict0[len(index)] += [index]
list0 = []
for i in dict0:
    list0.append(dict0[i])
print(list0)
2 голосов
/ 30 марта 2019

Вы можете создать dict, который отображает длины слов в список совпадающих слов, а затем получить список значений dict:

l = ['My', 'Is', 'Name', 'Hello', 'William']
d = {}
for w in l:
    d.setdefault(len(w), []).append(w)
print(list(d.values()))

Это выводит:

[['My', 'Is'], ['Name'], ['Hello'], ['William']]
1 голос
/ 30 марта 2019

вы можете использовать dict для записи группы строк по длине, defaultdict используется здесь для удобства.

from collections import defaultdict

str_list = ['My', 'Is', 'Name', 'Hello', 'William']
group_by_len = defaultdict(list)
for s in str_list:
    group_by_len[len(s)].append(s)

result = list(group_by_len.values())

вывод: [['My', 'Is'], ['Name'], ['Hello'], ['William']]

Надеюсь, что это поможетВы и прокомментируйте, если у вас есть дополнительные вопросы.:)

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