Python 如何从两个单独的列表中获取公共整数元素的索引并将其插入另一个列表?

Python 如何从两个单独的列表中获取公共整数元素的索引并将其插入另一个列表?,python,Python,我有三张单子 A_set = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 所有列表都是整数 我试图做的是将Q\u act与A\u集进行比较,然后获得与A\u集匹配的数字的索引 (例如: Q_act包含元素[2,3] 它位于索引[1,2]中,从集合) 之后,我将使用这些索引获得dur中的相应值,并将其存储在名为p\u dur\u Q\u act的列表中 a_set = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] q_act = {2, 3} dur

我有三张单子

A_set = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
所有列表都是整数

我试图做的是将
Q\u act
A\u集
进行比较,然后获得与
A\u集
匹配的数字的索引

(例如:
Q_act
包含元素
[2,3]
它位于索引
[1,2]
中,从
集合

之后,我将使用这些索引获得
dur
中的相应值,并将其存储在名为
p\u dur\u Q\u act
的列表中

a_set = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
q_act = {2, 3}    
dur = [0, 4, 5, 2, 1, 3, 4, 8, 2, 3]

p_dur_q_act = [d for a, d in zip(a_set, dur) if a in q_act]
(示例:使用上一示例的结果,
[1,2]

与索引
[1,2]
对应的
dur
列表中的值应存储在另一个名为
p\u dur\u Q\u act的列表中

i、 e.
[4,5]
应为列表中存储的值
p\u dur\u Q\u act

那么,如何从两个单独的列表中获取公共整数元素(即
[1,2]
)的索引并将其插入到另一个列表中呢


到目前为止,我使用的代码如下:

我写这个是因为它返回索引。但不是
[4,5]

p_Q = set(Q_act).intersection(A_set)
    p_dur_Q_act = [i + 1 for i, x in enumerate(p_Q)]
    print(p_dur_Q_act)
我也试过了,但是我收到了一个错误
TypeError:int类型的参数不可编辑

 p_dur_Q_act = [i + 1 for i, x in enumerate(Q_act) if any(elem in x for elem in A_set)]
    print(p_dur_Q_act)
使用函数获取列表中元素的索引

>>> a_set = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> q_act = [2, 3]
>>> dur = [0, 4, 5, 2, 1, 3, 4, 8, 2, 3]
>>>
>>> print([dur[a_set.index(q)] for q in set(a_set).intersection(q_act)])

[4, 5]
使用函数获取列表中元素的索引

>>> a_set = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> q_act = [2, 3]
>>> dur = [0, 4, 5, 2, 1, 3, 4, 8, 2, 3]
>>>
>>> print([dur[a_set.index(q)] for q in set(a_set).intersection(q_act)])

[4, 5]

另一个选项是使用
枚举
迭代器生成每个索引,然后仅选择所需的索引:

a_set = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
q_act = [2, 3]    
dur = [0, 4, 5, 2, 1, 3, 4, 8, 2, 3]

p_dur_q_act = [i for i,v in enumerate(a_set) if v in q_act]

print([dur[p] for p in p_dur_q_act if p in dur]) # [4, 5]
如果匹配的数量很大,这比重复调用索引更有效,因为调用的数量与匹配的数量成正比,但调用的持续时间与_集的长度成正比。通过将q_act转换为一个集合,枚举方法可以变得更加有效,因为
中的
比列表更适合集合。然而,在这些尺度上,不会有明显的差异

不过,您不需要将这些映射到索引值。如果使用
zip
a\u集
映射到
dur
,然后选择
d
值,其
a
值位于
q\u act
中,则可以得到相同的结果

a_set = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
q_act = {2, 3}    
dur = [0, 4, 5, 2, 1, 3, 4, 8, 2, 3]

p_dur_q_act = [d for a, d in zip(a_set, dur) if a in q_act]

另一个选项是使用
枚举
迭代器生成每个索引,然后仅选择所需的索引:

a_set = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
q_act = [2, 3]    
dur = [0, 4, 5, 2, 1, 3, 4, 8, 2, 3]

p_dur_q_act = [i for i,v in enumerate(a_set) if v in q_act]

print([dur[p] for p in p_dur_q_act if p in dur]) # [4, 5]
如果匹配的数量很大,这比重复调用索引更有效,因为调用的数量与匹配的数量成正比,但调用的持续时间与_集的长度成正比。通过将q_act转换为一个集合,枚举方法可以变得更加有效,因为
中的
比列表更适合集合。然而,在这些尺度上,不会有明显的差异

不过,您不需要将这些映射到索引值。如果使用
zip
a\u集
映射到
dur
,然后选择
d
值,其
a
值位于
q\u act
中,则可以得到相同的结果

a_set = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
q_act = {2, 3}    
dur = [0, 4, 5, 2, 1, 3, 4, 8, 2, 3]

p_dur_q_act = [d for a, d in zip(a_set, dur) if a in q_act]

我会使用集合使它在列表comp:p_dur_q_act=[a_set.index(q)for q in set(a_set)&set(q_act)]中更明确一点,我收到了这个消息,这意味着什么?@AJGayeta,你可能错过了print语句中的
[]
括号。我使用了相同的代码,现在它只返回[]嗯,我是confused@AJGayeta,签出更新后的答案似乎很好。我会使用集合使它在列表中更明确一点comp:p_dur_q_act=[a_set.index(q)for q in set(a_set)&set(q_act)]我收到了这个消息,这意味着什么?@AJGayeta,你可能错过了print语句中的
[
括号。我使用了相同的代码,现在它只返回[]嗯,我是confused@AJGayeta,签出更新的答案似乎很好。