将列表中的相应项打印到包含数字的另一个列表

时间:2016-08-30 10:22:01

标签: python list

我的问题是这个。 这是两个列表

codes = ['a', 'b', 'c', 'a', 'e', 'f', 'g', 'a', 'i', 'j', 'a', 'l']
pas = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

我如何找到所有' a'的位置?在代码列表中。然后打印出pas表中的相应项。 这就是输出应该是什么。它们也应该使用.sort()函数进行排序。

1
4
8
11

我已经提出了这个代码。 (那不起作用)

qwer = [i for i,x in enumerate(codes) if x == common]
qwe = [qwer[i:i+1] for i in range(0, len(qwer), 1)] 
print(pas[qwe])

获得正确输出的最佳方法是什么?

4 个答案:

答案 0 :(得分:4)

>>> pas = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>> codes = ['a', 'b', 'c', 'a', 'e', 'f', 'g', 'a', 'i', 'j', 'a', 'l']
>>> result = sorted(i for i,j in zip(pas,codes) if j=='a')
>>> for i in result:
...     print i
... 
1
4
8
11

答案 1 :(得分:1)

有很多方法可以实现它。您的示例列表是:

>>> codes = ['a', 'b', 'c', 'a', 'e', 'f', 'g', 'a', 'i', 'j', 'a', 'l']
>>> pas = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

方法1:使用enumerate

>>> indices = [pas[i] for i, x in enumerate(codes) if x == "a"]
indices = [1, 4, 8, 11]

方法2 :使用zip

>>> [p for p, c in zip(pas, codes) if c == 'a']
[1, 4, 8, 11]

答案 2 :(得分:0)

刚刚添加了另一种使用numpy的方法:

import numpy as np
codes = np.array(['a', 'b', 'c', 'a', 'e', 'f', 'g', 'a', 'i', 'j', 'a', 'l'])
pas = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

index = np.where(codes=='a')
values = pas[index]

In [122]: print(values)
[ 1  4  8 11]

答案 3 :(得分:0)

codes = ['a', 'b', 'c', 'a', 'e', 'f', 'g', 'a', 'i', 'j', 'a', 'l']
pas = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

[pas[index] for index, element in enumerate(codes) if element == "a"]