Mam jedną tablicę jak A = [1,2,3]
i innej tablicy B = [4,5,6]
. Teraz muszę kolejną tablicę C tak, że elementy w C powinny być te same elementy B o wystąpieniu w kolejności elementem A. podobnych, C = [4, 5, 5, 6, 6, 6]
Jak uzyskać jedną liczbę konkretnych razy w python tablicy
Odpowiedz
A = [1,2,3]
B = [4,5,6]
C = [b_item for a_item, b_item in zip(A,B) for _ in range(a_item)]
print C
Wynik:
[4, 5, 5, 6, 6, 6]
ten jest to odpowiednik jednej linii do:
C = []
for a_item, b_item in zip(A,B):
for _ in range(a_item):
C.append(b_item)
... co jest z grubsza odpowiednikiem
C = []
for i in range(min(len(A), len(B))):
a_item = A[i]
b_item = B[i]
for _ in range(a_item):
C.append(b_item)
(N.B. Nie daj się zaskoczyć przez podkreślenie. It's an ordinary variable. To jest zwykle używany, gdy w rzeczywistości nie muszą odnosić się do wartości zmiennej, tak jak w tym przykładzie)
Moje rozwiązanie:
C = sum([[B[i]]*A[i] for i in range(len(A))], [])
print C
wyjaśnieniu:
[B[i]]*A[i]
stworzy listę A[i]
pozycje B[i]
[B[i]]*A[i] for i in range(len(A))]
daje listę list np [[4], [5, 5], [6, 6, 6]]
sum(C, [])
przekonwertuje listę list do listy
Tak, to działa. 'suma (sequence, [])' jest mało wydajna pod względem pamięci, ponieważ musi tworzyć wiele list pośrednich, ale to nie jest wielka sprawa, jeśli C jest względnie mała. – Kevin
podam inny sposób to zrobić, stosując inny pomysł (nie twierdząc, powinien to wykorzystać, ale ze względów dydaktycznych)
znajdę dość schludny być zdolne do replikacji elementy w Pythonie przy użyciu
[0]*3 # it means we create 3 elements of zero: [0,0,0]
jeśli ja po prostu to zrobić:
[[x]*i for i,x in zip(A, B)]
otrzymuję grupy elementów:
[[4], [5, 5], [6, 6, 6]]
Następnie możemy użyć itertools.chain wrócić do jednej listy:
from itertools import chain
list(chain(*[[x]*i for i,x in zip(A, B)]))
[4, 5, 5, 6, 6, 6]
Oto kolejny rozwiązanie za pomocą numpy:
import numpy
a = numpy.array = [1,2,3]
b = numpy.array = [4,5,6]
c = numpy.repeat(b,a)
Wynik:
array([4, 5, 5, 6, 6, 6])
Tutaj Więcej informacji o używaniu numpy.repeat: http://docs.scipy.org/doc/numpy/reference/generated/numpy.repeat.html
Innym sposobem:
C = []
for a, b in zip(A, B):
C.extend([b] * a)
Ale wolałbym listę zrozumieniem, tylko bez uciążliwego _item
, tj,
C = [b for a, b in zip(A, B) for _ in range(a)]
Lub krócej (ale dla dużych przypadkach wolno) Suma:
C = sum(([b] * a for a, b in zip(A, B)), [])
- 1. numpy.tile Niecałkowitą liczbę razy
- 2. uzyskać liczbę wartości w tablicy z smarty
- 3. Jak znaleźć jedną liczbę w ciągu znaków w Pythonie?
- 4. Python, jak wstawić 32-bitową liczbę całkowitą do tablicy bajtów
- 5. Jak uzyskać pierwszą liczbę elementów N z tablicy
- 6. Jak zachować najwyższą liczbę elementów tablicy w mongoDB?
- 7. Jak uzyskać liczbę wyliczeń?
- 8. Python: jak uzyskać posortowaną liczbę elementów na liście?
- 9. Jak mogę znaleźć liczbę elementów w tablicy?
- 10. Jak znaleźć liczbę przewrotów w tablicy?
- 11. python - jak uzyskać liczbę aktywnych wątków uruchomionych przez określoną klasę?
- 12. Usuń jedną kolumnę dla tablicy numpy
- 13. pandy, python - jak wybrać konkretne razy timeseries
- 14. Uzyskaj łączną liczbę elementów w tablicy
- 15. XSD - jak dopuszczać elementy w dowolnej kolejności dowolną liczbę razy?
- 16. Jak przekonwertować z tablicy boolean na int tablicy w python
- 17. Jak uzyskać pozycję klucza w tablicy
- 18. przeliczania wartości RGBA w jedną liczbę całkowitą w JavaScript
- 19. Jak uzyskać liczbę usuniętych obiektów
- 20. Uzyskaj liczbę razy Stosowany jest kod kuponu w Magento
- 21. Znajdź liczbę powtórzonych podbarw w tablicy
- 22. Jak przestawić liczbę punch razy dziennie na serwerze sql 2005?
- 23. Python zaokrągla liczbę całkowitą do następnej setki
- 24. Jak uzyskać liczbę znaków w std :: string?
- 25. Jak uzyskać liczbę NSMutableDictionary w iphone?
- 26. Jak uzyskać całkowitą liczbę tabel w postgresql?
- 27. Jak uzyskać liczbę tygodni w miesiącu
- 28. Jak uzyskać liczbę wpisów w pomiarze
- 29. Jak uzyskać liczbę losową w FactoryGirl?
- 30. Jak uzyskać liczbę cykli procesora w Win32?
mógłbyś wyjaśnić to dla .. mniej pythonic pochylonych ludzi takich jak ja? Myślałem o 2 pętlach lol –
@SterlingArcher, na pewno. W pewnym sensie używam dwóch dla pętli. Po prostu wpakowałem ich obu w jedno wyrażenie. – Kevin
Dzięki. Ale jak powiedział Sterling Archer ... czy jest jakaś prosta logika, aby to zrobić? Chociaż to działa. – sparrow