在多个列表上打印使用min函数获得的最小值的列表名称

时间:2019-04-28 06:23:05

标签: python python-3.x

假设我有3个Python列表

l1 = [2, 5, 2, 4, 1] 
l2 = [5, 1, 6, 3, 9] 
l3 = [4, 9, 1, 8, 4]

我想获取列表名称,该列表名称的对应索引将具有最低的值。

喜欢0 th 索引

l1 = 2l2 = 4l3 = 4

在这种情况下,应用min函数后,我将得到2作为答案。我想要的不是获取值,而是想要从中选择列表名称的列表(即本示例中的l1

我确实尝试过在for循环中使用min,但这仅给出了三个列表中的最小值,而无法获取列表名称

l1 = [2, 5, 2, 4, 1] 
l2 = [5, 1, 6, 3, 9] 
l3 = [4, 9, 1, 8, 4]

for i in range(len(l1)):
    print(min(l1[i], l2[i], l3[i]))

我得到的输出:

2 1 1 3 1

因此,对于上面的示例,预期输出为l = [l1, l2, l3, l2, l1]

1 个答案:

答案 0 :(得分:1)

没有干净,简单的方法可以在Python中以字符串形式访问变量的名称。有关讨论,请参见Getting the name of a variable as a string

一种实现所需目标的方法是将名称显式存储在列表旁边:

lists = [
    {
        'name': 'l1',
        'data': [2, 5, 2, 4, 1],
    },
    {
        'name': 'l2',
        'data': [5, 1, 6, 3, 9],
    },
    {
        'name': 'l3',
        'data': [4, 9, 1, 8, 4],
    },
]

for idx in range(len(lists[0]['data'])):
    compare = [
        li['data'][idx]
        for li
        in lists
    ]
    minval = min(compare)
    minidx = compare.index(minval)
    minname = lists[minidx]['name']
    print(minname)

输出

l1
l2
l3
l2
l1