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

Python 如果列表包含任何关键字,是否从列表中获取项目?,python,list,Python,List,在我的Python代码中,有两个对象,(x,y) x是包含x、y和z坐标的单独函数的numpy数组。每个x、y和z坐标对应于列表“y”中的一个对象 “y”是a-j之间的字母列表,顺序是随机的 每个字母都有多个实例,例如:a b b c d a f b d e f e c a等等。对于“x”的每个值,都有一个对应的“y”字母。每一行都不一样 我想得到对应于所选字母列表的x,比如a、c和f 我该怎么做?我试过研究切片和索引,但我不确定从哪里开始 试图从数组x中获取一个项目,该项目对应于列表y中的同一

在我的Python代码中,有两个对象,(
x
y

x
是包含x、y和z坐标的单独函数的numpy数组。每个x、y和z坐标对应于列表“y”中的一个对象

“y”是a-j之间的字母列表,顺序是随机的

每个字母都有多个实例,例如:a b b c d a f b d e f e c a等等。对于“x”的每个值,都有一个对应的“y”字母。每一行都不一样

我想得到对应于所选字母列表的
x
,比如a、c和f

我该怎么做?我试过研究切片和索引,但我不确定从哪里开始

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

您可以使用和函数来实现这一点

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]})
defaultdict(,{'a':[1,4],'c':[3,5],'f':[2,6]})
您可以使用和函数来实现这一点

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]})
defaultdict(,{'a':[1,4],'c':[3,5],'f':[2,6]})

您需要对应于“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]

您需要对应于“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]

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

exp = ['a', 'c', 'f']
output = [idx+1 for idx, ch in enumerate(Y) if ch in exp]
否则,您可以尝试zip、izip或izip_:

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]

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

exp = ['a', 'c', 'f']
output = [idx+1 for idx, ch in enumerate(Y) if ch in exp]
否则,您可以尝试zip、izip或izip_:

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]

只需在两个列表上使用sort,并将它们匹配起来。Python也从最小到最大对字母进行排序。1对应于a,3对应于c吗?只需在两个列表上使用sort,并将它们匹配起来。Python也会从最小到最大对字母进行排序。1是否对应于a,3是否对应于c?这并非偶然:)这种方法的问题是,如果同一个字符对应于多个数字,这将失败。@在这种情况下,它的行为与您的解决方案不同,但它不会“失败”。注:问题陈述指的是想要“x”,它是单数,而不是复数,清楚地表明每个随机字母只对应一个整数,需要一个整数,而不是一个列表。由于问题陈述没有考虑多个匹配,因此它没有指定首选的行为(如果有)。嗨,John!谢谢你的回复,但是我写问题时出错了,是的,字母对应不同的数字。我现在正试图重新编写这个问题(并非偶然:)这种方法的问题是,如果同一个字符对应多个数字,则该方法将失败。@在这种情况下,它的行为与您的解决方案不同,但它不会“失败”。注:问题陈述指的是想要“x”,它是单数,而不是复数,清楚地表明每个随机字母只对应一个整数,需要一个整数,而不是一个列表。由于问题陈述没有考虑多个匹配,因此它没有指定首选的行为(如果有)。嗨,John!谢谢你的回复,但是我写问题时出错了,是的,字母对应不同的数字。我现在正试着重新写这个问题+1,因为尽管它对这个问题有不同的解释,这也是一个很好的方法。+1因为,尽管它对这个问题有不同的解释,这也是一个很好的方法。