athletes = [['Phelps', 'Lochte', 'Schooling', 'Ledecky', 'Franklin'], ['Felix', 'Bolt', 'Gardner', 'Eaton'], ['Biles', 'Douglas', 'Hamm', 'Raisman', 'Mikulak', 'Dalton']]
t = []
other = []
for lst in athletes:
for lst2 in athletes:
if 't' in lst2:
t.append(lst2)
else:
other.append(lst2)
-1
Claire Hultquist
17 grudzień 2019, 00:24
3 odpowiedzi
# make a "flat" list of names
flat_list = sum(athletes, [])
# use list comprehensions
t = [x for x in flat_list if "t" in x]
other = [x for x in flat_list if "t" not in x]
0
Simon Crane
17 grudzień 2019, 00:28
Dlaczego miałbyś powtarzać całą listę dwukrotnie?
– roganjosh
17 grudzień 2019, 00:30
Myślę, że jest to bardziej czytelne niż użycie pętli for, a to i tak nie zajmie dużo czasu
– Simon Crane
17 grudzień 2019, 00:33
1
Zajmuje to około dwa razy więcej czasu. I nie wyjaśnia niczego, co było nie tak z oryginalnym podejściem
– roganjosh
17 grudzień 2019, 00:34
for x in [item for sublist in athletes for item in sublist]:
t.append(x) if 't' in x else other.append(x)
Wynik:
t: ['Lochte', 'Bolt', 'Eaton', 'Dalton']
other: ['Phelps', 'Schooling', 'Ledecky', 'Franklin', 'Felix', 'Gardner', 'Biles', 'Douglas', 'Hamm', 'Raisman', 'Mikulak']
1
Michael Chatiskatzi
6 wrzesień 2020, 23:07
Możemy użyć przepisu partition
z itertools
.
from itertools import chain, tee, filterfalse
def partition(pred, iterable):
'Use a predicate to partition entries into false entries and true entries'
# partition(is_odd, range(10)) --> 0 2 4 6 8 and 1 3 5 7 9
t1, t2 = tee(iterable)
return filterfalse(pred, t1), filter(pred, t2)
athletes = [['Phelps', 'Lochte', 'Schooling', 'Ledecky', 'Franklin'], ['Felix', 'Bolt', 'Gardner', 'Eaton'], ['Biles', 'Douglas', 'Hamm', 'Raisman', 'Mikulak', 'Dalton']]
flat_athletes = chain.from_iterable(athletes)
without_t, with_t = partition(lambda ath: "t" in ath, flat_athletes)
without_t
i with_t
z be iteratorami. Jeśli chcesz tworzyć listy, po prostu zrób without_t = list(witout_t)
.
1
Kyle Parsons
17 grudzień 2019, 00:55
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.
for lst2 in lst