Mam listę jak poniżej, gdzie pierwszy element to id, a drugi to ciąg:
[(1, u'abc'), (2, u'def')]
Chcę utworzyć listę identyfikatorów tylko z tej listy krotek, jak poniżej:
[1,2]
Użyję tej listy w programie, __in
więc musi to być lista wartości całkowitych.
masz na myśli coś takiego?
To, co faktycznie masz, to lista
tuple
obiektów, a nie lista zestawów (jak sugerowało twoje pierwotne pytanie). Jeśli w rzeczywistości jest to lista zbiorów, to nie ma pierwszego elementu, ponieważ zbiory nie mają porządku.Tutaj utworzyłem płaską listę, ponieważ ogólnie wydaje się to bardziej przydatne niż tworzenie listy krotek 1 elementu. Jednakże, można łatwo utworzyć listę 1 pozycja krotki tylko o wymianie
seq[0]
z(seq[0],)
.źródło
int() argument must be a string or a number, not 'QuerySet'
int()
nigdzie nie ma w moim rozwiązaniu, więc wyjątek, który widzisz, musi pojawić się później w kodzie.__in
do filtrowania danych__in
? - Na podstawie podanych przykładowych danych wejściowych zostanie utworzona lista liczb całkowitych. Jeśli jednak lista krotek nie zaczyna się od liczb całkowitych, nie otrzymasz liczb całkowitych i będziesz musiał uczynić je liczbami całkowitymi przezint
lub spróbować dowiedzieć się, dlaczego pierwszego elementu nie można przekonwertować na liczbę całkowitą.new_list = [ seq[0] for seq in yourlist if type(seq[0]) == int]
?Możesz użyć „rozpakowywania krotek”:
W czasie iteracji każda krotka jest rozpakowywana, a jej wartości są ustawiane na zmienne
idx
ival
.źródło
Po to
operator.itemgetter
jest.itemgetter
Oświadczenie zwraca funkcję , która zwraca indeks elementu można określić. To dokładnie to samo, co pisanieAle uważam, że
itemgetter
jest to jaśniejsze i wyraźniejsze .Jest to przydatne do tworzenia zwartych instrukcji sortowania. Na przykład,
źródło
Z punktu widzenia wydajności w python3.X
[i[0] for i in a]
ilist(zip(*a))[0]
są równoważnelist(map(operator.itemgetter(0), a))
Kod
wynik
3.491014136001468e-05
3.422205176000717e-05
źródło
jeśli krotki są unikalne, to może działać
źródło
ordereddict
.kiedy biegałem (jak sugerowałem powyżej):
zamiast wracać:
Otrzymałem jako zwrot:
Okazało się, że muszę użyć list ():
aby pomyślnie zwrócić listę, korzystając z tej sugestii. To powiedziawszy, jestem zadowolony z tego rozwiązania, dzięki. (przetestowane / uruchomione przy użyciu Spyder, konsoli iPython, Python v3.6)
źródło
Pomyślałem, że może być przydatne porównanie środowisk wykonawczych różnych podejść, więc zrobiłem test porównawczy (używając simple_benchmark biblioteki )
I) Benchmark mający krotki z 2 elementami
Jak można się spodziewać, że wybór pierwszego elementu z krotek według indeksu
0
jest najszybszym rozwiązaniem bardzo zbliżonym do rozwiązania do rozpakowywania, oczekując dokładnie 2 wartościII) Benchmark mający krotki z 2 lub więcej elementami
źródło
To są krotki, a nie zestawy. Możesz to zrobić:
źródło
możesz rozpakować swoje krotki i uzyskać tylko pierwszy element, używając rozumienia list:
wynik:
to zadziała bez względu na to, ile elementów masz w krotce:
wynik:
źródło
Zastanawiałem się, dlaczego nikt nie zasugerował użycia numpy, ale teraz po sprawdzeniu rozumiem. Może nie jest najlepszy dla tablic typu mieszanego.
To byłoby rozwiązanie w numpy:
źródło