比较列表并突出显示关键元素

Posted

技术标签:

【中文标题】比较列表并突出显示关键元素【英文标题】:comparing lists and highlight the key elements 【发布时间】:2019-06-08 16:45:35 【问题描述】:
from colorama import Fore, init
init()

key_numbers = [1,3,5,7,9]
numbers  = [3,4,6,3,8,9,7,9,3,1]

for number in numbers:
       if number in key_numbers: 
           number1 = Fore.RED + number 
           numbers = [number1 if number else number for number in numbers] 
      else:
          continue 

基本上我希望代码遍历numbers 列表中的每个数字,并检查相应的数字是否存在于key_numbers 列表中。

如果存在,我想用红色字体替换数字并移动到下一个数字

如果key_numbers 列表中存在数字,则输出应该有一个以红色突出显示的数字,而其他数字则以常规字体和颜色突出显示。

我想我用number1 替换数字会出错。有人可以帮我解决我哪里出错了吗?

【问题讨论】:

请务必给回答您问题的人一些反馈! 【参考方案1】:

您可以查看map 运算符:

items = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, items))

您无需提供 lambda。您还可以显式定义一个函数,如果它在键中则返回红色数字,否则返回黑色数字。

例如

from colorama import Fore, init
init()

key_numbers = [1,3,5,7,9]
numbers  = [3,4,6,3,8,9,7,9,3,1]

def highlight(number):
    if number in key_numbers:
        return Fore.RED + str(number)
    else:
        return str(number)

colored_numbers = list(map(highlight, numbers))

【讨论】:

在第 9 行,您需要将 number 转换为带有 str(number) 的字符串,以使您的代码正常工作。 谢谢。没有在本地运行它,只是想提一下map 运算符,因为它非常适合。【参考方案2】:

下面的代码将获取您的两个列表并打印出彩色输出,突出显示来自numbers 的列表项,它们也是number_keys 的一部分。让我知道这是否是您想要实现的目标!

#!/usr/bin/python3
from colorama import init, Fore, Style

# init colorama
init()

def highlight(numbers, keys):
    """
    check if numbers exists in keys and
    print + highlight them in red.
    """
    for number in numbers:
        if number in keys:
            print(Fore.RED + str(number) + Style.RESET_ALL, end=" ")
        else:
            print(number, end=" ")
    print()  # print another "\n"

# define numbers and keys
key_numbers = [1, 3, 5, 7, 9]
numbers  = [3,4,6,3,8,9,7,9,3,1]

print("numbers to highlight: ".format(key_numbers))

# call highlight()
highlight(numbers, key_numbers)

【讨论】:

以上是关于比较列表并突出显示关键元素的主要内容,如果未能解决你的问题,请参考以下文章

从列表视图中选择并突出显示项目

如何以html格式动态突出显示一些单词

在 ASP.Net 中搜索关键字突出显示

突出显示列表视图项

比较两个或多个 JTable 和“突出显示”差异

比较并突出显示