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)