当前位置: 首页 > 知识库问答 >
问题:

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

容鸿畴
2023-03-14

我有两份清单:

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]

共有3个答案

督宏旷
2023-03-14

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

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)
洪和风
2023-03-14

你可以把它写成一个列表理解。

>>> 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]]
邬楚青
2023-03-14

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

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]]
 类似资料:
  • 问题内容: 我想做一些类似于此处NumPy数组的操作,更改不在索引列表中的值,但不完全相同。 考虑一个数组: 我知道我可以通过索引列表访问其元素,例如: 但是我还需要访问那些 不在列表中的元素。天真地,这是: 正确的方法是什么? 问题答案: In [170]: a = np.array([0.2, 5.6, 88, 12, 1.3, 6, 8.9]) In [171]: idx=[1,2,5] I

  • 问题内容: 如果您在python中有一个列表,并且想要将索引1、2和5的元素提取到新列表中,您将如何做? 这是我的做法,但我并不十分满意: 有没有更好的办法? 更一般而言,给定一个索引元组,即使使用重复,您将如何使用该元组从列表中提取相应的元素(例如,元组产生)。 问题答案: 也许使用这个:

  • 为简单起见,我有2个字符串列表,我需要将字符串连接到一个列表中并创建另一个列表。例如—— 我想要输出为 我可以使用正则for循环来实现这一点。但不知道如何继续使用java8 我试图让自己思考nJava8:-)

  • 我有一份我正在处理的项目清单。我正在寻找初始列表中的特定项目,并希望在遍历列表时从该列表中删除已找到的项目。我遍历列表使用 有没有一种方法可以在不操纵两个列表的情况下做到这一点?

  • 我有一个数据框,其中一些单元格包含多个值的列表。我不想在一个单元格中存储多个值,而是希望扩展dataframe,以便列表中的每个项都有自己的行(在所有其他列中都有相同的值)。因此,如果我有: 如何转换为长格式,例如: 索引并不重要,可以将现有列设置为索引,而最终的顺序并不重要。

  • 问题内容: 给出以下列表: 我想将[a]的每个元素重复其在[b]中的对应位置的编号,以产生此结果: 即0发生1次,5发生2次,1发生1次。 问题答案: 内容如下: -重复elem次 从两个列表中组成一个2元组的列表,将每个元素与另一个列表中的对应元素配对。这为您提供了用例中需要传递给的确切信息。 -将迭代器的结果列表展平为单个值列表。您既可以像我一样,也可以像马丁·彼得斯那样。