有没有办法在循环中有更多相关的变量名?

Is there a way to have more relevent variable names in a loop?

我有一个遵循以下格式的列表:

message = [sender, receiver, message_name]

我必须遍历存储在 message_stack 列表中的所有消息,并评估每条消息的名称是否有效( 如果它的名字在 valid_names 列表中)

目前我有:

for message in message_stack:
    if message[2] not in valid_names:
        print("Error : wrong name.")

迭代器 message 有一个相关的名称,但是有没有办法让 message[2] 更清楚地知道它是一个消息名称?

谢谢!

您可以使用:

for sender, receiver, message_name in message_stack:
    if message_name not in valid_names:
        print("Error : wrong name.")

如果您不使用发送者和接收者,您甚至可以省略它们:

for _, __, message_name in message_stack:
    if message_name not in valid_names:
        print("Error : wrong name.")

您想使用可迭代解包:

for sender, receiver, message_name in message_stack:
    if message_name not in valid_names:
        print("Error : wrong name.")
    # do some more stuff with sender, receiver....

术语说明,message 不是“迭代器”。迭代器在 Python 中具有特定含义(当您执行 iter(iterable) 时从 iter 返回,即 iterator = iter(iterable))。您可以将其称为“循环变量”

使用 star unpack 获取最后一个元素:

for *_, message_name in message_stack:
    if message_name not in valid_names:
        print(some_thing)

或者考虑在创建列表时使用namedtuple

from collections import namedtuple
Message = namedtuple('Message', ['sender', 'receiver', 'name'])
message_stack = # a list of Message object
for message in message_stack:
    if message.name not in valid_names:
        print(some_thing)