发布
社区首页 >问答首页 >如果元组的元素不在字符串列表中,则从元组列表中删除元组

如果元组的元素不在字符串列表中,则从元组列表中删除元组
EN

Stack Overflow用户
提问于 2019-06-17 16:28:30
回答 4查看 182关注 0票数 0

我正在编写一些代码,如果元组不包含单独列表中的所有字符串,则需要从元组列表中删除一个元组。我已经让它在for循环中工作,但我正在努力提高代码的效率。举个例子,如果我有

代码语言:javascript
代码运行次数:0
复制
list_of_tups = [('R', 'S', 'T'), ('A', 'B'), ('L', 'N', 'E'), ('R', 'S', 'T', 'L'), ('R', 'S', 'T', 'L', 'N', 'E')]
needed_strings = ['R', 'S', 'T']

我想在我的列表中保留以下元组:

代码语言:javascript
代码运行次数:0
复制
[('R', 'S', 'T'), ('R', 'S', 'T', 'L'), ('R', 'S', 'T', 'L', 'N', 'E')]

这在以下for-循环中工作:

代码语言:javascript
代码运行次数:0
复制
for s in needed_strings:
    for tup in list_of_tups:
        if s not in tup:
            list_of_tups.remove(tup)

然而,我希望通过列表理解来完成这一任务。我尝试这样做会产生一个元组列表,其中任何字符串,而不是所有字符串,都出现在元组中。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-06-17 16:32:59

您可以在嵌套的理解中使用all

代码语言:javascript
代码运行次数:0
复制
list_of_tups = [('R', 'S', 'T'), ('A', 'B'), ('L', 'N', 'E'), ('R', 'S', 'T', 'L'), ('R', 'S', 'T', 'L', 'N', 'E')]
needed_strings = ['R', 'S', 'T']

[t for t in list_of_tups if all(c in t for c in needed_strings)]

结果

代码语言:javascript
代码运行次数:0
复制
[('R', 'S', 'T'), ('R', 'S', 'T', 'L'), ('R', 'S', 'T', 'L', 'N', 'E')]

只要列表中包含可理解的项目,另一种可能更容易阅读的方法就是让needed_strings成为set。那么您可以使用issubset()

代码语言:javascript
代码运行次数:0
复制
list_of_tups = [('R', 'S', 'T'), ('A', 'B'), ('L', 'N', 'E'), ('R', 'S', 'T', 'L'), ('R', 'S', 'T', 'L', 'N', 'E')]
needed_strings = set(['R', 'S', 'T'])

[t for t in list_of_tups if needed_strings.issubset(t)]
票数 5
EN

Stack Overflow用户

发布于 2019-06-17 16:48:02

你可以试试这个,

代码语言:javascript
代码运行次数:0
复制
list_of_tups = [('R', 'S', 'T'), ('A', 'B'), ('L', 'N', 'E'), ('R', 'S', 'T', 'L'), ('R', 'S', 'T', 'L', 'N', 'E')]
needed_strings =['R', 'S', 'T']
y=[x for x in list_of_tups if set(needed_strings).issubset(set(x))] 
print(y)

产出:

代码语言:javascript
代码运行次数:0
复制
[('R', 'S', 'T'), ('R', 'S', 'T', 'L'), ('R', 'S', 'T', 'L', 'N', 'E')]
票数 1
EN

Stack Overflow用户

发布于 2019-06-17 16:53:00

代码语言:javascript
代码运行次数:0
复制
list_of_tups = [
    ('R', 'S', 'T'), 
    ('A', 'B'), 
    ('L', 'N', 'E'), 
    ('R', 'S', 'T', 'L'), 
    ('R', 'S', 'T', 'L', 'N', 'E')
]
needed_chars = {'R', 'S', 'T'}  # using a set to speed up membership operations

# Append the tuple element from the list of tuples if the condition is met
list_of_tups_removed = [
    tup
    for tup in list_of_tups
    if any(c in needed_chars for c in tup)  # if any of the characters are present in needed_chars 
]

print(list_of_tups_removed)

输出:

代码语言:javascript
代码运行次数:0
复制
[('R', 'S', 'T'), ('R', 'S', 'T', 'L'), ('R', 'S', 'T', 'L', 'N', 'E')]

列表理解语法只能用于创建新列表。它不能用于从现有列表中删除元素。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56635398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档