grep或在元组中搜索字符串 - python

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了grep或在元组中搜索字符串 - python相关的知识,希望对你有一定的参考价值。

我是python的新手,我正试图弄清楚如何从元组或列表中执行grep。

我有一个像这样的查询结果:

[(123456, '123_ABC', 'abc123defa', '/path/whatever', 11111L, 'YES'),
(789456, '123_DEF', 'abc123defb', '/path/whatever/0', 11111H, 'NO'),
(234567, '123_GHI', 'abc123defc', '/path/whatever/1', 11111T, 'NO')]

查询的结果有多行,如上例所示。用户输入他正在寻找的“grep”字符串,让我们说“789456”,因此结果应该只打印:

789456, '123_DEF', 'abc123defb', '/path/whatever/0', 11111H, 'NO'

也许,平面文本没有引号并以“|”分隔(我不知道我以后真的可以处理那件事)。

所以我的问题是,我是否应该首先将元组更改为列表然后尝试创建一个函数来执行“grep”?如果我把它作为一个元组并且从那里做“grep”,它是一样的吗?我正在寻找一些没有循环数据的东西。

答案

只需保持具有789456的行与列表理解:

queries = [(123456, '123_ABC', 'abc123defa', '/path/whatever', '11111L', 'YES'),
          (789456, '123_DEF', 'abc123defb', '/path/whatever/0', '11111H', 'NO'),
          (234567, '123_GHI', 'abc123defc', '/path/whatever/1', '11111T', 'NO')]

to_keep = 789456

print([query for query in queries if to_keep in query])
# [(789456, '123_DEF', 'abc123defb', '/path/whatever/0', '11111H', 'NO')]

或者与filter()

list(filter(lambda x: to_keep in x, queries))
另一答案

您可以使用in来检查值是否在元组中。

例如:

d = [(123456, '123_ABC', 'abc123defa', '/path/whatever', 11111, 'YES'),(789456, '123_DEF', 'abc123defb', '/path/whatever/0', 11111, 'NO'),(234567, '123_GHI', 'abc123defc', '/path/whatever/1', 11111, 'NO')]

for i in d:
    if 789456 in i:
        print i

输出:

(789456, '123_DEF', 'abc123defb', '/path/whatever/0', 11111, 'NO')

以上是关于grep或在元组中搜索字符串 - python的主要内容,如果未能解决你的问题,请参考以下文章

Python:在元组中存储许多正则表达式匹配?

python ValueError:在元组中解包的值太多

Python基础-04元组

Python基础-04元组

Python基础--元组(tuple)

在元组中存储指向布尔值的指针