@JRBRO

Как правильнее всего разбить список?

Есть список, который хотелось бы разбить на две группы.list = ['a', 'b', 'c', 'd', 'e']

Как это сделать максимально правильно с точки зрения "правописания"?

Ожидаемый результат

list1 = ['a', 'c']
list2= ['b', 'd', 'e']


Еcть такой вариант, чтобы достать отдельные, но как тогда правильно достать оставшуюся?
a_list = ['a', 'b', 'c', 'd']
index = [0, 2]

accessed_mapping = map(a_list.__getitem__, indices_to_access)
accessed_list = list(accessed_mapping)

print(accessed_list)


И вообще было бы шикарно, если можно вручную прописать что
list1 = ['a', 'c'] из списка list
а все остальные тогда становятся list2 автоматически


П.С. больше стоит вопрос к "правописанию", чтобы в минимум строчек получить результат. В ручную разбить есть возможность, но при изменениях списка менять ВСЕ индексы не хотелось бы. Как вариант, можно не по индексу, а по ключам, чтобы я один раз прописал list1 = ['a', 'c'], а все остальные list2, и тогда общий лист как не меняй, ключ решает
  • Вопрос задан
  • 113 просмотров
Решения вопроса 2
Vindicar
@Vindicar
RTFM!
Ну для начала неплохо бы внятно описать, как задаются желаемые элементы.
Если по индексам, то да, твоё решение через __getitem__() вполне работоспособно.
import typing as t
lst = ['a', 'b', 'c', 'd', 'e']  #  не называй переменную list

def split(lst: t.List[t.Any], indices: t.Iterable[int]) -> t.Tuple[t.List[t.Any], t.List[t.Any]]:
    selected = list(map(lst.__getitem__, indices))
    remainder = list(lst)
    # удаляем с конца, чтобы еще не обработанные индексы не поехали
    # вот только с отрицательными индексами это уже не прокатит
    # их придётся самомму пересчитывать в положительные
    for i in sorted(indices, reverse=True):
        del remainder[i]
    return selected, remainder

print(split(lst, [0, 3]))  # (['a', 'd'], ['b', 'c', 'e'])
Ответ написан
drygdryg
@drygdryg
Python-разработчик
Неактуально
Используйте срезы списков.
list = ['a', 'b', 'c', 'd', 'e']
list1 = list[:2]  # ['a', 'b']
list2 = list[2:]  # ['c', 'd', 'e']

https://habr.com/ru/post/319200/

UPD: используйте Counter из модуля collections, он может работать как мультимножество (то есть неупорядоченный список), поддерживающее вычитание:
from collections import Counter

lst = ['a', 'b', 'c', 'd', 'e']
lst1 = ['a', 'c']
lst2 = list((Counter(list) - Counter(list1)).elements())  # ['b', 'd', 'e']
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
aRegius
@aRegius
Python Enthusiast
group_1, group_2 = [], []

for index, value in enumerate(data):
	 if index in indices:
		   group_1.append(value)
	 else:
		   group_2.append(value)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы