python提取list中的元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python提取list中的元素相关的知识,希望对你有一定的参考价值。

参考技术A 1、提取某个或某几个元素
ki = [1, 3, 4, 5, 6, 8]
print(ki[2])
print(ki[2:4])
结果:
4
[4, 5]

2、提取所有元素
ki = [1, 3, 4, 5, 6, 8]
for i in range(0, len(ki)):
print(ki[i])
结果:
1
3
4
5
6
8

3、随机提取元素
import random

ki = [1, 3, 4, 5, 6, 8]
mk = random.sample(ki, 4)
print(mk)
结果:
[3, 4, 8, 1]

我想为列表中的每个元素提取索引[重复]

【中文标题】我想为列表中的每个元素提取索引[重复]【英文标题】:I would like to extract indexes for each element in a list [duplicate] 【发布时间】:2020-11-20 08:41:42 【问题描述】:

我有两个列表:

list1 = ["A", "B", "C", "D", "E"]

list2 = ["A", "A", "C", "B", "E", "A", "C", "B", "E", "D"]

我想为每个元素创建一个索引列表列表:

[[0,1,5], [3, 7], [2, 6], [9], [4,8]]

我试过这个:

for i in list1:
    list3 = [j for j,x in enumerate(list2) if x == i]
    print(list3)

但我得到了这些不同的结果:

[0, 1, 5]
[3, 7]
[2, 6]
[9]
[4, 8]

【问题讨论】:

【参考方案1】:

最简单的方法是再创建一个列表并附加到该列表

In [28]: list1 = ["A", "B", "C", "D", "E"]
    ...: list2 = ["A", "A", "C", "B", "E", "A", "C", "B", "E", "D"]

In [29]: data = []

In [30]: for i in list1:
    ...:      list3 = [j for j,x in enumerate(list2) if x == i]
    ...:      data.append(list3)
    ...:

In [31]: data
Out[31]: [[0, 1, 5], [3, 7], [2, 6], [9], [4, 8]]

In [32]: data = []

In [33]: for i in list1:
    ...:      data.append([j for j,x in enumerate(list2) if x == i])

In [35]: data
Out[35]: [[0, 1, 5], [3, 7], [2, 6], [9], [4, 8]]

【讨论】:

【参考方案2】:

你可以把它写成列表推导式。

>>> list3 = [[j for j,x in enumerate(list2) if x == i] for i in list1]
>>> list3
[[0, 1, 5], [3, 7], [2, 6], [9], [4, 8]]

但是,您可以通过仅对 list2 进行一次迭代而不是对 list1 的每个元素进行一次迭代来提高时间复杂度。

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> for idx, el in enumerate(list2):
...     d[el].append(idx)
... 
>>> res = [d[el] for el in list1]
>>> res
[[0, 1, 5], [3, 7], [2, 6], [9], [4, 8]]

【讨论】:

【参考方案3】:

你可以把它放在另一个列表理解中:

list1 = ["A", "B", "C", "D", "E"]
list2 = ["A", "A", "C", "B", "E", "A", "C", "B", "E", "D"]
list3 =[[j for j,x in enumerate(list2) if x == i] for i in list1]
print(list3)

【讨论】:

【参考方案4】:

你可以使用一个简单的列表推导......像

[[j for j,x in enumerate(list2) if x == i] for i in list1]

【讨论】:

我的错。。我点击了发布按钮,意识到已经发布了另一个答案。以后我会注意的。

以上是关于python提取list中的元素的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 Python 代码为列表中的所有元素提取相同的数据?

Python元素树 - 从元素中提取文本,剥离标签

Python 提取Twitter tweets中的元素(包括text, screen names, hashtags)

python数组中怎样删除符合条件的元素

python数组中怎样删除符合条件的元素

Python - 如何从列表中提取最后一个 x 元素