如果'某些元素'在元组列表的特定位置

时间:2014-03-03 08:13:30

标签: python list tuples

我有一个元组列表:

MyList = [('name1', 'surname1', 'age1'), ('name2', 'surname2', 'age2'), ...]

我想在MyList中检查“if'name2',例如:

if 'name2' in MyList[?][0]: 
    print "do something"

如果我要写if 'name2' in MyList[0]我将访问元素('name1','surname1','age1'),而我的意思是访问元素中每个元组的0位元素列表。我想有一个原理可以做到这一点,但我是一个新手,我自己无法在网上找到它,任何人都可以帮我这个吗?

3 个答案:

答案 0 :(得分:2)

您可以使用any函数和生成器函数,如此

if any("name2" in name for name, surname, age in my_list):
    # do something

这里迭代时将元组的所有元素解压缩到name, surname, age。因此,我们只需检查name2是否在名称中。这和写作一样

if any("name2" in current_item[0] for current_item in my_list):

这样效率很高,因为匹配后立即产生True,其他项目无需检查。

如果您正在寻找比较两个字符串的方法,那么您应该使用==运算符,就像这样

if any("name2" == name for name, surname, age in my_list):
# do something

答案 1 :(得分:1)

听起来您可以从使用词典中受益:

my_dict = dict( (x[0],(x[1],x[2])) for x in MyList)

然后,您可以检查是否存在'names2' in my_dict,还可以直接访问数据my_dict['names2']

答案 2 :(得分:1)

我不确定这是否是最有效的方法,但你可以使用它。

>>>MyList = [('name1', 'surname1', 'age1'), ('name2', 'surname2', 'age2'), ...]
>>> if 'name2' in zip(*MyList)[0]:
              #do something. 

关键是它创建了原始列表的转置。 警告:所有元组都必须具有相同的长度以避免数据丢失。

编辑:官方docs代表拉链。

用于解压缩参数列表的*运算符的正式docs