我有一个清单a:
a = ['2005', '2006']
并列出b:
b = ['2005.123', '2005.234', '2006.123', '2007.234']
如果我想要b中包含字符串' 2005'的所有元素的列表,我会这样做:
[value for value in b if '2005' in str(value)]
但是我想要一个包含b中所有值的列表,其中包含列表a中的任一字符串值(列表a和b可以是多个元素长),而且这个值不起作用:
[value for value in b if ['2005', '2006'] in str(value)]
我希望代码返回
['2005.123', '2005.234', '2006.123']
有没有一种更简单的方法可以做到这一点,而不使用循环?
答案 0 :(得分:4)
使用any()
:
[value for value in b if any(d in value for d in a)]
#['2005.123', '2005.234', '2006.123']
此外,您不必调用str(value)
,因为它已经是字符串。
更新:为了好玩,以下是使用filter()
执行相同操作的另一种方法:
filter(lambda value: any(d in value for d in a), b)
答案 1 :(得分:2)
你要求"包含"但你的例子有前缀。如果它的前缀需要使用str.startswith
,这将允许您传递一组前缀作为其第一个参数:
a_tup = tuple(a)
[value for value in b if value.startswith(a_tup)]