在元组中查找元素并过滤它们 [英] Finding in elements in a tuple and filtering them
问题描述
假设我有一个元组:
[('text-1','xxx'), ('img-1','iii'), ('img-2','jjj'), ('text-2','xxx')]
我想过滤掉列表并生成一个新的列表,其中包含以img"开头的元素.所以我的新列表将如下所示:
[('img-1','iii'), ('img-2','jjj')]
谢谢!
一种方式:
<预><代码>>>>l = [('text-1','xxx'), ('img-1','iii'), ('img-2','jjj'), ('text-2','xxx')]>>>[t for t in l if t[0].startswith('img')][('img-1', 'iii'), ('img-2', 'jjj')]另一种方式:
<预><代码>>>>filter(lambda x: x[0].startswith('img'), l)[('img-1', 'iii'), ('img-2', 'jjj')]第一个称为列表理解.请参阅FC 的回答一个相关的技术.基本语法是 [{expression} for {item_var_or_vars} in {iterable} if {boolean_expression}]
.它在语义上等同于这样的事情:
new_list = []对于 {iterable} 中的 {item_var_or_vars}:如果 {boolean_expression}:new_list.append({表达式})
if {boolean_expression}
位是可选的,就像在 for 循环中一样.
第二个只是内置函数 filter
,它接受一个测试函数和一个可迭代对象,并返回一个包含通过"测试函数的每个元素的列表.lambda
,如果你以前没见过,它只是定义函数的一种快捷方式.你可以这样做:
def keep_this_element(element):return element[0].startswith('img') # 返回 True for ('img...', '...')new_list = filter(keep_this_element, l) # 只保留返回 True 的元素
Assuming I have a tuple like:
[('text-1','xxx'), ('img-1','iii'), ('img-2','jjj'), ('text-2','xxx')]
I want to filter out the list and produce a new one with elements that begin with 'img'. So my new list will look like:
[('img-1','iii'), ('img-2','jjj')]
Thanks!
One way:
>>> l = [('text-1','xxx'), ('img-1','iii'), ('img-2','jjj'), ('text-2','xxx')]
>>> [t for t in l if t[0].startswith('img')]
[('img-1', 'iii'), ('img-2', 'jjj')]
Another way:
>>> filter(lambda x: x[0].startswith('img'), l)
[('img-1', 'iii'), ('img-2', 'jjj')]
The first is called a list comprehension. See F.C.'s answer for a related technique. The basic syntax is [{expression} for {item_var_or_vars} in {iterable} if {boolean_expression}]
. It's semantically equivalent to something like this:
new_list = []
for {item_var_or_vars} in {iterable}:
if {boolean_expression}:
new_list.append({expression})
The if {boolean_expression}
bit is optional, just as it is in the for loop.
The second is simply the built-in function filter
, which accepts a test function and an iterable, and returns a list containing every element that "passes" the test function. lambda
, if you haven't seen it before, is just a quick way of defining a function. You could do this instead:
def keep_this_element(element):
return element[0].startswith('img') # returns True for ('img...', '...')
new_list = filter(keep_this_element, l) # keeps only elements that return True
这篇关于在元组中查找元素并过滤它们的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!