Получение элементов в определенном диапазоне списка - PullRequest
3 голосов
/ 28 мая 2019

У меня есть список Python, например list = [1,2,3,4,5,6,7,8,9]. Кроме того, у меня есть еще один список list2 = ['a','b','c','d','e','f','g','h','j']. Теперь я хотел бы сделать следующее:

idx = (list > 3) & (list < 7)
list2 = list2[idx]

Это должно дать ['d','e','f']. Конечно, это невозможно в списках. Как это можно сделать со списками?

Ответы [ 3 ]

6 голосов
/ 28 мая 2019

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

l1 = [1,2,3,4,5,6,7,8,9]
l2 = ['a','b','c','d','e','f','g','h','j']
result = [a for a, b in zip(l2, l1) if 3 < b < 7]

Выход:

['d', 'e', 'f']

Для получения сокращенного списка:

result, reduced = map(list, zip(*[[a, b] for a, b in zip(l2, l1) if 3 < b < 7]))

Выход:

['d', 'e', 'f'] #result
[4, 5, 6] #reduced
1 голос
/ 28 мая 2019

Попробуйте это:

#Make sure all lists are numpy arrays.
import numpy as np
idx = np.where((list > 3) & (list < 7))
list2 = list2[idx]
0 голосов
/ 28 мая 2019

Опция со списком доступа к элементам по индексу:

res = [ list2[idx] for idx, e in enumerate(list1) if 7 > e > 3 ]
print(res) #=> ['d', 'e', 'f']


Чтобы получить элементы из обоих списков:
[ [list2[idx], e] for idx, e in enumerate(list1) if 7 > e > 3 ]
#=> [['d', 4], ['e', 5], ['f', 6]]

Затем транспонировать:

res1, res2 = [ list(i) for i in zip(*[ [list2[idx], e] for idx, e in enumerate(list1) if 7 > e > 3 ]) ]
print (res1, res2 ) #=> ['d', 'e', 'f'] [4, 5, 6]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...