在我的Python代码中,有两个对象,(x
,y
)。
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中的同一行,如果这有意义的话?
答案 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.defaultdict
和enumerate
功能来实现此目标
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]