Python中从元组的元组列表提取含指定字符串的元组问题
解决元组列表中提取含指定字符串元素的问题
嘿,你的问题出在检查"c"的位置不对哦!咱们先看看你的原代码:
X = [(('a','b','c'),10),(('c','d','e'),20),(('f','e','g'),25)] result = [item for item in X if "c" in item]
这里的item是类似(('a','b','c'),10)的外层元组,你检查的是"c"是否在这个外层元组里——但外层元组的直接元素是('a','b','c')(子元组)和10(数字),"c"根本不在外层元组的直接元素列表里,所以自然筛选不到任何结果。
正确的写法
你需要把检查的目标定位到每个item里的子元组(也就是item[0]),因为"c"是存在于这个子元组中的。修改后的列表推导式如下:
X = [(('a','b','c'),10),(('c','d','e'),20),(('f','e','g'),25)] filtered_X = [item for item in X if "c" in item[0]] print(filtered_X)
运行这段代码,就能得到你想要的输出:
[(('a', 'b', 'c'), 10), (('c', 'd', 'e'), 20)]
通用扩展(如果不确定"c"的位置)
如果以后你的数据结构更复杂,比如"c"可能出现在item的任意嵌套位置,可以用any()函数配合生成器表达式来全面检查:
filtered_X = [item for item in X if any("c" in elem for elem in item if isinstance(elem, (str, tuple)))]
不过针对你当前的场景,第一种直接定位子元组的写法已经完全够用啦。
内容的提问来源于stack exchange,提问作者pyception
相关产品推荐
相关产品推荐

