在元组中查找元素并过滤它们 [英] Finding in elements in a tuple and filtering them

查看:43
本文介绍了在元组中查找元素并过滤它们的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有一个元组:

[('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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆