Как получить подсписок списка на основе другого списка? - PullRequest
0 голосов
/ 26 сентября 2018
a = [12,3,8,14]
b = ['a','b','c','d']

Я хочу найти подсписок элементов в b, чтобы соответствующий элемент в a превышал 10:

b_even = [b[i] for i, e in enumerate(a) if e > 10]

Этот код работает нормально, но есть ли более простые способы, такие как b[a>10] в R?

Ответы [ 4 ]

0 голосов
/ 26 сентября 2018

Моим первым выбором было бы то, что у вас есть, но я мог бы получить те же результаты, используя;

[s[1] for s in zip(a, b) if s[0] > 10]
0 голосов
/ 26 сентября 2018
import numpy as np
a = np.array(a)
b = np.array(b)
c = b[np.where(a>10)]
0 голосов
/ 26 сентября 2018

Обычным решением является использование zip:

res = [i for i, j in zip(a, b) if j > 10]

Функциональная альтернатива возможна через operator.itemgetter и enumerate:

from operator import itemgetter

res = itemgetter(*(idx for idx, val in enumerate(a) if val > 10))(b)

Для векторизованной функциональности / синтаксиса, вы можете использовать стороннюю библиотеку, такую ​​как NumPy.

0 голосов
/ 26 сентября 2018

Zip?

print([[*i] for i in list(zip(a,b)) if i[0] > 10])
[[12, 'a'], [14, 'd']]
...