我有一个嵌套列表,如下所示:
L = [['James', 'Bob', '23', '47'], ['Earl', 'Carl', '16', '43'], ['Milly', 'Wendy', '1', '21']]
我想从每个名单中取出名称并将它们放入名为“新列表”的新列表中。没有数字。
我尝试了以下代码:
for i in L[0][0]:
newList.append(i)
print(newList)
然而,这只是打印了第一个名字,每个字母都用逗号分隔。我希望新列表看起来像这样:
newList = ['James', 'Bob', 'Earl', 'Carl', 'Milly', 'Wendy']
答案 0 :(得分:3)
只需使用嵌套列表解析:
In [61]: [i for sub in L for i in sub[:2]]
Out[61]: ['James', 'Bob', 'Earl', 'Carl', 'Milly', 'Wendy']
答案 1 :(得分:1)
您可以使用isdigit()
过滤掉名称
res = [j for i in L for j in i if not j.isdigit()]
['James', 'Bob', 'Earl', 'Carl', 'Milly', 'Wendy']
答案 2 :(得分:1)
分两步完成。
首先,抓住每个列表的前两个元素:
>>> names_nested = [sub[:2] for sub in L]
>>> names_nested
[['James', 'Bob'], ['Earl', 'Carl'], ['Milly', 'Wendy']]
然后删除此列表:
>>> names = [name for sub in names_nested for name in sub]
>>> names
['James', 'Bob', 'Earl', 'Carl', 'Milly', 'Wendy']
...或者使用itertools.chain
更轻松地做到:
>>> from itertools import chain
>>> list(chain(*(sub[:2] for sub in L)))
['James', 'Bob', 'Earl', 'Carl', 'Milly', 'Wendy']
...或itertools.chain.from_iterable
摆脱拆包明星和一组括号。
>>> list(chain.from_iterable(sub[:2] for sub in L))
['James', 'Bob', 'Earl', 'Carl', 'Milly', 'Wendy']
答案 3 :(得分:1)
您需要迭代列表L
for i in L:
newList.append(i[0])
newList.append(i[1])
#or simply newList.extend(i[:2])
print(newList)
修改强>
for i in L:
if i[0] not in newList:
newList.append(i[0])
if i[1] not in newList:
newList.append(i[1])
#or simply newList.extend(i[:2])
print(newList)
答案 4 :(得分:0)
如果问题只是每个子列表中的前两个元素,您可以这样做:
from itertools import chain
result = chain.from_iterable(sublist[:2] for sublist in L)
这将生成一个链对象,您可以使用list
对其进行评估:
list(result)
# ['James', 'Bob', 'Earl', 'Carl', 'Milly', 'Wendy']
答案 5 :(得分:0)
使用numpy对列表进行切片并将结果展平为1D列表:
import numpy as np
np.array(L)[:,0:2].flatten().tolist()
Out[349]: ['James', 'Bob', 'Earl', 'Carl', 'Milly', 'Wendy']
答案 6 :(得分:0)
使用isdigit方法查看str是否为数字:
[j for l in L for j in l if not j.isdigit()]
输出:
['James', 'Bob', 'Earl', 'Carl', 'Milly', 'Wendy']