有没有一种巧妙的方法可以在Python中折叠3个for循环

时间:2020-08-17 14:24:03

标签: python for-loop discord.py

我有这种非常棘手的方式来查找不和谐语音通道中的所有用户。

for guild in self.bot.guilds:
   for channel in guild.voice_channels:
      for member in channel.members:
         self.increment_field(member, 'voice_time')

有没有更好的方法

2 个答案:

答案 0 :(得分:4)

我想像这样“折叠”一个3D循环的时候,我将其移到了一个生成器函数上,使其具有yield值,然后将该生成器与平坦的for循环一起使用以后:

def gen_the_things():
    for guild in self.bot.guilds:
       for channel in guild.voice_channels:
          for member in channel.members:
             yield member

for member in gen_the_things():
    self.increment_field(member, 'voice_time')

这只是移动大部分,但这并不一定很糟糕。

您可能需要将东西传递给该函数,或使其成为实例方法。为了简洁起见,我在这里保持简单。

答案 1 :(得分:0)

对于我来说,这似乎很合理,当您具有如此深层的数据结构时,这根本不是“ hacky”。​​