首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果字符串不在另一个单项字符串列表中,则从列表中删除它们。

如果字符串不在另一个单项字符串列表中,则从列表中删除它们。
EN

Stack Overflow用户
提问于 2020-09-24 09:24:30
回答 7查看 91关注 0票数 0

我有两个字符串列表如下:

代码语言:javascript
运行
复制
good_tags = ['c#', '.net', 'java']

all_tags = [['c# .net datetime'],
            ['c# datetime time datediff relative-time-span'], 
            ['html browser timezone user-agent timezone-offset']]

例如,我的目标是只保留‘all_tag’中字符串列表中的'good_tags‘,

  • ‘all_tag’:c# .net datetime
  • 的第一行将变成(基于‘good_tags’中的字符串列表):c# .net

我尝试使用“in”而不是“not in”,基于Remove all the elements that occur in one list from another

代码语言:javascript
运行
复制
y3 = [x for x in all_tags if x in good_tags]
print ('y3: ', y3) 
y4 = [x for x in good_tags if x in all_tags]
print ('y4: ', y4)

退出:

代码语言:javascript
运行
复制
y3:  []
y4:  []
EN

Stack Overflow用户

发布于 2020-09-24 09:44:37

您的all_tags是一个列表,其中包含三个列表,其中每个列表包含一个字符串。因此,您首先需要做的是将每个子列表转换为一个包含字符串的列表,而不仅仅是一个字符串。

由于只有空格,用于分隔标记而没有逗号,所以必须使用以下方法将列表从['c# .net datetime']转换为['c#', '.net', 'datetime']

代码语言:javascript
运行
复制
[x for segments in all_tags[0] for x in segments.split()]

然后您可以对整个列表执行此操作,因此遍历它的长度:

代码语言:javascript
运行
复制
[[x for segments in all_tags[entry] for x in segments.split()] for entry in range(len(all_tags))]

返回:

代码语言:javascript
运行
复制
[['c#', '.net', 'datetime'],
 ['c#', 'datetime', 'time', 'datediff', 'relative-time-span'],
 ['html', 'browser', 'timezone', 'user-agent', 'timezone-offset']]

现在你可以根据你的好标签过滤这个列表了:

代码语言:javascript
运行
复制
y3 = [[x for x in [words for segments in all_tags[entry] for words in segments.split()] if x in good_tags] for entry in range(len(all_tags))]

输出:

代码语言:javascript
运行
复制
[['c#', '.net'], ['c#'], []]
票数 1
EN
查看全部 7 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64043458

复制
相关文章

相似问题

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