Python 在列表上循环时打印变量名

Python 在列表上循环时打印变量名,python,Python,考虑变量列表和Python列表: apple='green' banana='yellow' orange='orange' fruits = [apple, banana, orange] 在删除列表中的元素时,如何打印变量的名称而不是其值 for fruit in fruits: #print the names of variables, that is "apple", "banana", etc. 我知道字典更适合解决这个问题,但为了论证起见,可以用列表来解决吗?这有点骗

考虑变量列表和Python列表:

apple='green'
banana='yellow'
orange='orange'

fruits = [apple, banana, orange]
在删除列表中的元素时,如何打印变量的名称而不是其值

for fruit in fruits:
    #print the names of variables, that is "apple", "banana", etc.

我知道字典更适合解决这个问题,但为了论证起见,可以用列表来解决吗?

这有点骗人,但是如果将变量名存储在FROUTS数组中而不是变量本身,那么就很简单了:

>>> apple = 'green'
>>> banana = 'yellow'
>>> orange = 'orange'
>>> fruits = ['apple','banana','orange']
>>> for fruit in fruits:
...     print fruit, vars()[fruit]
...     
apple green
banana yellow
orange orange
如果您确实想要获取变量名,则会遇到一个问题,因为数组没有存储变量,而是存储它指向的字符串-例如,您可以在赋值后更改apple的内容,以演示数组保存原始字符串:

>>> fruity = [ apple, orange, banana ]
>>> apple = 'yikes'
>>> print fruity
['green', 'orange', 'yellow']
最好是构建vars()字典的反向查找,并尝试查找变量

>>> yy = dict([v,k] for k,v in vars().items() if isinstance(v,str))
>>> for fruit in fruity:
...     print yy.get(fruit,'Unknown'), fruit
...     
Unknown green
orange orange
banana yellow

使用NamedObject,应该可以:

apple='green'
banana='yellow'
orange='orange'
fruits = [apple, banana, orange]    

apple = NamedObject('apple', apple)
print(apple)
print(apple.name)
应打印:

green
apple
如果你不明白,这里还有一件类似的事情:

你想要这个:

apple = "green"
banana = "yellow"
orange = "orange"

fruits = [apple, banana, orange]
for fruit in fruits:
    fruit_name = [key for key, value in locals().items() if value == fruit]
    print(fruit_name[0])

如果您可以保证没有其他变量具有相同的值,则可能。但这不是你想要依赖的东西。请参阅。乍一看,您可能可以使用
vars()
globals()
执行某些操作。但是,您必须循环查看哪些变量名具有您正在检查的值。如果两个变量的值相同,这将是一个问题。正如您所描述的,dict是这里最好的解决方案;它只是持有他们的价值观。改用口述。字典肯定会更好。在本例中,为什么不创建一个包含所有水果的字典?