假设我有以下名单:
names = [['Matt', 'Matt', 'Paul'], ['Matt']]我只想返回列表中的"Matts“,但我也希望维护列表结构的列表。所以我想回来:
[['Matt', 'Matt'], ['Matt']]我有这样的东西,但这会把所有的东西放在一个大清单上:
matts = [name for namelist in names for name in namelist if name=="Matt"]我知道这样的事情是可能的,但我想避免重复列表和附加。这个是可能的吗?
names = [['Matt', 'Matt', 'Paul'], ['Matt']]
matts = []
for namelist in names:
matts_namelist = []
for name in namelist:
if name=="Matt":
matts_namelist.append(name)
else:
pass
matts.append(matts_namelist)发布于 2021-11-02 14:50:56
使用list.count的另一种方法
>>> names = [['Matt', 'Matt', 'Paul'], [], ['Matt']]
>>> [name.count('Matt') * ['Matt'] for name in names]
[['Matt', 'Matt'], [], ['Matt']]您也可以尝试使用itertools.repeat
>>> import itertools
>>> [[*itertools.repeat('Matt', name.count('Matt'))] for name in names]
[['Matt', 'Matt'], [], ['Matt']]最后,正如@DaniMensejo所建议的,您还可以在嵌套的range理解中使用list迭代器:
>>> [['Matt' for _ in range(name.count('Matt'))] for name in names]
[['Matt', 'Matt'], [], ['Matt']]发布于 2021-11-02 14:44:14
IIUC,您可以使用下面这样的嵌套列表来完成此操作:
>>> names = [['Matt', 'Matt', 'Paul'], ['Matt']]
>>> [[name for name in lst_name if name=='Matt'] for lst_name in names]
[['Matt', 'Matt'], ['Matt']]发布于 2021-11-02 14:47:22
使用filter函数-
matts = [list(filter(lambda x: x=='Matt', namelist)) for namelist in names]https://stackoverflow.com/questions/69812272
复制相似问题