Mam taką listę w Pythonie:

a = [[5, -4, 6], [9, 0, 6], [20, -1, 9], [6, 5, -7]]

I mam tablicę b, takich jak ten:

b = [0, 1, 2, 0]

Jak mogę uzyskać tę listę?

[ a[0][b[0]], a[1][b[1]], a[2][b[2]], a[3][b[3]] ]

Powinienem wspomnieć, że długości b i a są zmiennymi n. Wiem, że mogę zrobić listę z pętlą z tymi wartościami, ale szukam składni (coś w rodzaju mapy).

Dzięki za wszelką pomoc.

1
K47 5 czerwiec 2018, 12:13

4 odpowiedzi

Najlepsza odpowiedź

Szybki sposób z zip to:

a = [[5, -4, 6], [9, 0, 6], [20, -1, 9], [6, 5, -7]]
b = [0, 1, 2, 0]
result = [ai[bi] for ai, bi in zip(a, b)]
print(result)
# [5, 0, 9, 6]
3
jdehesa 5 czerwiec 2018, 09:27

Spróbuj użyć map i wewnątrz go użyj lambda i zip:

a = [[5, -4, 6], [9, 0, 6], [20, -1, 9], [6, 5, -7]]
b = [0, 1, 2, 0]
print(list(map(lambda x: x[0][x[-1]], list(zip(a,b)))))

Wynik:

[5, 0, 9, 6]
0
U11-Forward 5 czerwiec 2018, 09:25
a = [[5, -4, 6], [9, 0, 6], [20, -1, 9], [6, 5, -7]]
b = [0, 1, 2, 0]

c = list(a[i][b[i]] for i in range(len(a)))
#or c = list([ai[bi] for ai, bi in zip(a, b)])
print(c) #return [5, 0, 9, 6]
0
Hearner 5 czerwiec 2018, 09:21

Jeśli możesz użyć Numpy, możesz zrobić:

>>> import numpy as np
>>> a = [[5, -4, 6], [9, 0, 6], [20, -1, 9], [6, 5, -7]]
>>> b = [0, 1, 2, 0]
>>> arr = np.array(a)
>>> arr[np.arange(len(a)), b]
array([5, 0, 9, 6])
1
OriolAbril 5 czerwiec 2018, 10:17