有没有办法在循环中有更多相关的变量名?
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)
我有一个遵循以下格式的列表:
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)