gpt4 book ai didi

python - 两个列表中彼此重复的唯一项目的列表

转载 作者:行者123 更新时间:2023-12-01 04:49:05 24 4
gpt4 key购买 nike

我正在尝试将两个列表合并为一个列表,仅包含唯一元素:

log_file = ['warning CS1607:', 'warning CSS607: cannot', 'normal_string',
'invalid error', 'normal_string', 'invalid error']

warnings_list = ('warning CS', 'warning LNK', 'invalid')
error_list = ('cannot', 'error')

found_warnings = [message for message in log_file for i in warnings_list if i in message]
found_errors = [message for message in log_file for i in error_list if i in message]

found_warnings = list(set(found_warnings))
found_errors = list(set(found_errors))

total_unique_errors = list(set(found_errors + found_warnings))

print total_unique_errors

我得到的输出是正确的:

['invalid error', 'warning CS1607:', 'warning CSS607: cannot']

还有什么更好的办法吗?

UPD#1:另外,我很想知道是否有任何方法可以保存独特错误或警告的数量?例如,如果我想获得与上面提到的相同的输出,但也想有一种方法来检查总错误/警告数量:len(found_errors)

谢谢!

最佳答案

  1. 首先将log_file条目转换为一个集合,以删除重复的条目,如下所示

    log_file = set(log_file)
  2. 将错误和警告列表合并到一个元组中

    entries = errors_list + warnings_list
  3. 然后迭代要检查的项目,如下所示

    [item for item in log_file if any(entry in item for entry in entries)]

简而言之,你的代码可以这样写

>>> entries = error_list + warnings_list
>>> [item for item in set(log_file) if any(entry in item for entry in entries)]
['invalid error', 'warning CS1607:', 'warning CSS607: cannot']

编辑:根据更新的问题,

>>> log_file = set(log_file)
>>> warnings = [item for item in log_file if any(entry in item for entry in warnings_list)]
>>> errors = [item for item in log_file if any(entry in item for entry in error_list)]
>>> warnings
['invalid error', 'warning CS1607:', 'warning CSS607: cannot']
>>> errors
['invalid error', 'warning CSS607: cannot']
>>> list(set(warnings + errors))
['invalid error', 'warning CS1607:', 'warning CSS607: cannot']

如果您可以使用 sets,则不必转换为 list 并使用 set 理解,如下所示

>>> warnings = {item for item in log_file if any(entry in item for entry in warnings_list)}
>>> errors = {item for item in log_file if any(entry in item for entry in error_list)}
>>> warnings
set(['invalid error', 'warning CS1607:', 'warning CSS607: cannot'])
>>> errors
set(['invalid error', 'warning CSS607: cannot'])
>>> warnings | errors
set(['invalid error', 'warning CS1607:', 'warning CSS607: cannot'])

关于python - 两个列表中彼此重复的唯一项目的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28781614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com