如果列表包含任何关键字,从列表列表中获取项目?

时间:2013-12-30 07:10:50

标签: python list

在我的Python代码中,有两个对象,(xy)。

x是来自包含x,y和z坐标的单独函数的numpy数组。每个x,y和z坐标对应于列表'y'中的对象。

和'y'将是a-j之间随机顺序的字母列表。

每个字母都有多个实例,例如:a b b c d a a f b e e e e e e e f e e e e f e e e e e f e e e e e e e e e e t对于'x'的每个值,都有一个相应的'y'字母。每条线都不同。

我希望获得与所选字母列表对应的x,例如a,c和f。

我该怎么做?我已经尝试过查看切片和指数,但我不知道从哪里开始。

尝试从数组x中获取一个项目,该项目对应于列表y中的同一行,如果这有意义的话?

3 个答案:

答案 0 :(得分:4)

您想要与'a','c'和'f'对应的值:

>>> x = [ 1, 2, 3, 4, 5, 6 ]
>>> y = 'cgadfh'
>>> d = dict(zip(y, x))
>>> d['a']
3
>>> [d[char] for char in 'acf']
[3, 1, 5]

'a'是y中的第三个字符,3是x中的第三个数字,因此d['a']返回3.

顺便说一句,无论y是字符串还是列表,这种方法都是一样的:

>>> x = [ 1, 2, 3, 4, 5, 6 ]
>>> y = ['c', 'g', 'a', 'd', 'f', 'h']
>>> d = dict(zip(y, x))
>>> [d[char] for char in 'acf']
[3, 1, 5]

答案 1 :(得分:1)

您可以使用collections.defaultdictenumerate功能来实现此目标

X = [ 1, 2, 3, 4, 5, 6]
Y = ["a", "f", "c", "a", "c", "f"]

from collections import defaultdict
result = defaultdict(list)
for idx, y in enumerate(Y):
    result[y].append(X[idx])
print result

<强>输出

defaultdict(<type 'list'>, {'a': [1, 4], 'c': [3, 5], 'f': [2, 6]})

答案 2 :(得分:0)

如果X只是从1开始的索引,那么您可以执行以下操作:

exp = ['a', 'c', 'f']
output = [idx+1 for idx, ch in enumerate(Y) if ch in exp]

否则你可以试试zip或zip或izip_longest:

import string
import random

a = range(15)
b = random.sample(string.lowercase, 15)
exp = random.sample(b, 3)

output = [k for k, v in zip(a, b) if v in exp]