【问题标题】:How to assign words to values in a list?如何将单词分配给列表中的值?
【发布时间】:2019-10-15 02:01:02
【问题描述】:

我有一个包含 4 个不同数字的列表,总共 10 个数字。对于这些数字中的每一个,我想分配一个颜色/单词。 因此,问题是,我如何从一个数字列表转到一个颜色列表,其中每个相同的数字都由相同的颜色/单词表示?

初始列表:

my_list = [72, 50, 3, 50, 16, 72, 3, 72, 3, 50]

预期输出:

print(my_list) -> ['red', 'blue', 'green', 'blue', 'black', 'red', 'green', 'red', 'green', 'blue']

我尝试了什么?

我从 my_list 中提取了唯一编号:

my_list = [72,50,3,50,72,3,72,3,50]

UniqueList = list(set(my_list))
print(UniqueList)

现在我需要从颜色列表 ['red', 'blue', 'green', 'black', 'yellow', 'purple'] 中为这 4 个唯一数字中的每一个分配一个颜色,然后生成my_list 再次使用颜色。不幸的是,我不知道如何前进。有什么想法吗?

【问题讨论】:

    标签: python list


    【解决方案1】:

    您可以创建一个查找字典:

    my_list = [72, 50, 3, 50, 16, 72, 3, 72, 3, 50]
    colors = ['red', 'blue', 'green', 'black', 'yellow', 'purple']
    
    lookup = dict(zip(set(my_list), colors))
    output = [lookup[number] for number in my_list]
    print(output)
    

    输出

    ['red', 'green', 'black', 'green', 'blue', 'red', 'black', 'red', 'black', 'green']
    

    您可以将lookup 字典视为将颜色分配给其中一个数字的函数。在上面的示例中,lookup 具有以下值:

    {72: 'red', 16: 'blue', 50: 'green', 3: 'black'}
    

    这意味着每次出现72 时都会分配'red'。你可以像这样自定义lookup

    lookup = {72 : 'green', 50 : 'black', 3 : 'yellow', 16: 'purple'}
    

    这一次每次72 出现green 都会被分配。在here 中查看有关如何创建字典的更多信息。

    更新

    如果您想保留列表中的出现顺序,您可以执行以下操作:

    seen = set()
    result = []
    for e in my_list:
        if e not in seen:
            result.append(e)
            seen.add(e)
    
    print(result)
    

    输出

    [72, 50, 3, 16]
    

    请注意,result 列表按出现顺序排列。

    【讨论】:

    • 天啊,这太完美了!正是我想要的。 ;-)
    • 还有一个问题。现在,在此示例中,查找选择前四种颜色,并将它们随机映射到四个唯一数字,并将该颜色指南应用于其他数字。如何确保数字列表中的第一个唯一元素与颜色列表中的第一个元素映射? (无需像上一个示例中显示的那样手动设置字典;假设值本身在一开始是未知的)。所以当你运行代码时,你总是得到相同的输出,现在它选择唯一颜色的顺序是可变的。
    • 您可以使用集合按顺序过滤列表
    • 好吧,假设在此列表中,第一个唯一编号是第一个,然后是第二个、第三个和第五个是最后一个唯一编号。可以使用颜色列表中的元素将它们固定映射。第一个具有第一种颜色的唯一编号;以该顺序具有第二个颜色等的第二个唯一编号?这只是一个问题,如果它太复杂也没关系,但它会使输出固定(而不是现在的变量);-)
    • 你的意思是:lookup = dict(zip(set(my_list), set(colors))) ?所以添加颜色?
    【解决方案2】:

    您还可以提供 {int: color} 键值对的字典,然后执行以下操作:

    my_list = [72, 50, 3, 50, 16, 72, 3, 72, 3, 50]
    mymap = {72: 'red', 50:'blue', 3:'green', 16:'black'}
    
    print([mymap[k]for k in my_list])
    
    ## output
    ['red', 'blue', 'green', 'blue', 'black', 'red', 'green', 'red', 'green', 'blue']
    

    【讨论】:

    • 啊哈!确实这也有效,但是如果在我从函数中提取它们之前列表中出现的值是未知的怎么办?我知道会有多少不同的值,但不知道它们是什么,因为函数会随机选择它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 2018-06-10
    • 1970-01-01
    • 2016-05-20
    • 2021-08-02
    • 1970-01-01
    • 2021-07-06
    相关资源
    最近更新 更多