Итак, есть список List = ['a', 'b', 'c', 'd', 'e']
и список индексов Indices = [1, 2, 4]
.
Я хочу разделить список на два списка: один, содержащий элементы в Indices
(['b', 'c', 'e']
), и другой, содержащий все остальные элементы (['a', 'd'
).
ДляПервый список У меня уже есть простое решение.
In_List = [List[i] for i in Indices]
Однако, для другого списка у меня есть только довольно уродливое решение
Out_List = [List[i] for i in range(len(List)) if i not in Indices]
Решение, которое у меня есть, работает, но оноПохоже, должен быть более элегантный способ сделать это.
Есть предложения?
Редактировать / обновить
Кажется, что есть 3 предложения:
Один цикл по индексам:
In_List = []
Out_List = []
for i in range(len(List)):
if i in Indices:
In_List.append(List[i])
else:
Out_List.append(List[i])
Цикл через перечисление:
In_List = []
Out_List = []
for index, value in enumerate(List):
if index in Indices:
In_List += [value]
else:
Out_List += [value]
Использование Numpy:
Indices = np.array(Indices)
List = np.array(List)
In_List = list(List[Indices])
Out_List = list(np.delete(List, Indices))
Спасибо всем за предложение.
Я взял эти три решения и свое первоначальное решение и сравнил их для списков разного размера (range(10, 1000, 10)
), каждый раз выбирая одну восьмую из элементов - в среднем более 100 повторений. Кажется, что понимание списка немного быстрее, чем циклы, но не значительно. Numpy, кажется, медленнее для коротких списков, но абсолютно разбивает другие решения для больших списков.
Редактировать / обновить : заставил numpy-версию также возвращать список, а затем обновил график.