繁体   English   中英

搜索列表中的元组元素

[英]Search tuple elements within in list

我在Python中有一个列表

list_data = [('a','b',5),('aa','bb',50)]

和一些变量:

a = ('a','b','2')
c = ('aaa','bbb','500')

现在我该怎么寻找,如果a已经存在的list_data
如果是,则在a的值上加上2,否则不附加到list_data

结果应为

list_data = [('a','b',7),('aa','bb',50),('aaa','bbb','500')]

实际上,这个问题是一个很好的方式来演示Python的做事方式。 因此,让我们看看我们能做什么。

为了检查,如果事情是你可以使用运营商蟒蛇名单in

if a in list_data:
    do_stuff()

但是您的要求有所不同。 如果我理解正确的话,您想进行多个键的搜索。 在这种情况下,您可以通过丢弃最后一个条目来“修剪”您的元组。

切片很方便:

value_trimmed = value[:-1]

现在,您可以列出修剪后的元组列表:

list_trimmed = []

for a in list_data:
    list_trimmed.append(a[:-1])

然后在那里搜索:

if a[:-1] in list_trimmed:
    do_smth()

可以使用list_comprehension以较少的冗长方式构造此列表:

list_trimmed = [item[:-1] for item in list_data]

要找到项目的确切位置,可以使用list的index()方法:

list_trimmed.index(a[:-1])

这将返回list_trimmed中首次出现的a[:-1]索引,如果找不到则抛出。 我们可以避免显式检查项目是否在列表中,而仅在捕获到异常时才进行插入。

您的完整代码如下所示:

list_data = [('a','b',5), ('aa','bb',50)]
values_to_find = [('a','b','2'), ('aaa','bbb','500')]

list_trimmed = [item[:-1] for item in list_data]

for val in values_to_find:
    val_trimmed = val[:-1]
    try:
        ind = list_trimmed.index(val_trimmed)
        src_tuple = list_data[ind]   
        # we can't edit tuple inplace, since they are immutable in python
        list_data[ind] = (src_tuple[0], src_tuple[1], src_tuple[2]+2)
    except ValueError:
        list_data.append(val)

print list_data

当然,如果您最关心的是速度或内存效率,则此代码不是很合适,但是您没有在问题中提及这些,我认为这并不是python真正的目的。

编辑:
您尚未指定第二次检查('aaa','bbb','500')时会发生什么-我们应该使用更新的列表并递增匹配元组的最后一个元素,还是应该坚持原始列表并插入另一个副本?

如果我们使用更新的列表,则不清楚如何处理将字符串'500'递增2(我们可以将其转换为整数,但是首先应该适当地构造查询)。

还是您的意思是将找到的元组的最后一个元素添加到列表中的元组(如果找到) 请修改您的问题以使其清楚。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM