将列表列表中的某些元素附加到另一个列表中

时间:2017-05-09 09:42:24

标签: python list nested

我有一个嵌套列表,如下所示:

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']

7 个答案:

答案 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']