Как изолировать значения из списка в Python? - PullRequest
1 голос
/ 10 октября 2019

У меня есть несколько списков, которые я пытаюсь исследовать. Я застрял в какой-то момент:

D = [1, 1, 1, 2, 5, 1, 1, 1, 1, 1, 3, 2, 1, 1]

Допустим, это список. Мне нужно изолировать новый список от списка D. Мы можем сказать, что я хочу отфильтровать эти «1»;но я не смог справиться.

Если я использую метод "index", например:

D = [1, 1, 1, 2, 5, 1, 1, 1, 1, 1, 3, 2, 1, 1]

E = []

for i in D:
    if not i == 1:
        E.append(D.index(i))

print(E)

Вывод: [3, 4, 10, 3]. Что мне нужно, так это[3, 4, 10, 11]. Так как значения в D [3] и D [11] одинаковы, python не позволяет мне получить второе. Как я могу решить это?

Ваша помощь высоко ценится.

Спасибо.

Ответы [ 3 ]

1 голос
/ 10 октября 2019

Использование функции index действительно всегда возвращает первый случай. Из документации :

list.index (x [, start [, end]])

Возврат на основе нуля индексав списке первого элемента, значение которого равно x. Вызывает ошибку ValueError, если такого элемента нет.

...

Мы можем использовать список пониманий и объединить его с перечислить чтобы получить то, что вы хотите:

[index for index, value in enumerate(D) if value != 1]
# [3, 4, 10, 11]
1 голос
/ 10 октября 2019

Вы можете написать эту программу разными способами. Сначала я попытаюсь адаптировать ваш пример с минимальными изменениями:

D = [1, 1, 1, 2, 5, 1, 1, 1, 1, 1, 3, 2, 1, 1]

E = []

for i in range(len(D)):
    if D[i] != 1:
        E.append(i)

print(E)

Однако есть и более короткое / простое однострочное решение:

D = [1, 1, 1, 2, 5, 1, 1, 1, 1, 1, 3, 2, 1, 1]
E = [i for i in range(len(D)) if D[i]!=1]
print(E)
1 голос
/ 10 октября 2019

Вы можете использовать условное понимание списка для перечисления значений в D и получения местоположений индексов тех значений, которые соответствуют вашему условию.

>>> [idx for idx, val in enumerate(D) if val != 1]
[3, 4, 10, 11]

Обратите внимание, что вы можететакже используйте filter для создания генератора значений в этих местоположениях индекса.

>>> list(filter(lambda val: val != 1, D))
[2, 5, 3, 2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...