Python 创建一个仅保存运动员的列表t’;如果包含“;t”;。如果不包含字母“;t”;,将运动员姓名保存到其他列表中

Python 创建一个仅保存运动员的列表t’;如果包含“;t”;。如果不包含字母“;t”;,将运动员姓名保存到其他列表中,python,Python,输出: for x in [item for sublist in athletes for item in sublist]: t.append(x) if 't' in x else other.append(x) 我们可以使用来自的分区配方 不带_t和带_t带be迭代器。如果你想让它们成为列表,只需做,而不做\t=list(whout\t)问题是什么?我认为内部for循环应该是lst中lst2的,为什么你要重复整个列表两次?我认为这比使用for循环可读性更强,而且这也不会花费太多

输出:

for x in [item for sublist in athletes for item in sublist]:
    t.append(x) if 't' in x else other.append(x)

我们可以使用来自的
分区
配方


不带_t
带_t
带be迭代器。如果你想让它们成为列表,只需做
,而不做\t=list(whout\t)

问题是什么?我认为内部for循环应该是lst中lst2的
,为什么你要重复整个列表两次?我认为这比使用for循环可读性更强,而且这也不会花费太多时间。它需要两倍的时间。这并不能解释原始方法的任何错误
# 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]
for x in [item for sublist in athletes for item in sublist]:
    t.append(x) if 't' in x else other.append(x)
t:  ['Lochte', 'Bolt', 'Eaton', 'Dalton']
other:  ['Phelps', 'Schooling', 'Ledecky', 'Franklin', 'Felix', 'Gardner', 'Biles', 'Douglas', 'Hamm', 'Raisman', 'Mikulak']
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)