【问题标题】:Python separating list (discord.py bot) [duplicate]Python分离列表(discord.py bot)[重复]
【发布时间】:2020-12-19 18:24:42
【问题描述】:

信息

我正在尝试分离一个自变量列表,但我的列表正在改变(列表中的事物数量正在改变)。我试过了

var1, var2, var3 = mylist

但它仅在 my_list 有 3 个“项目”时有效,但不会每次都有 3 个项目,有时数量会发生变化。我正在尝试制作一个不和谐的机器人,它从语音通道中收集 id,并在只接受一个 id 的命令“client.get_channel()”中使用它们。我会用它来检查谁连接到我的语音频道。

目标

我想将列表分成自变量,即使列表有时具有不同数量/数量的“项目”。


我的解决方案

我正在考虑制作一个脚本来计算我列表中的项目(例如 len(my_list))并产生足够的变量,但我不知道怎么做。

【问题讨论】:

  • 您这样做的目的是什么?知道这可能有助于为您提供解决方案。您可以使用列表无法使用的单独变量做什么?
  • 为什么要将它们分离成变量?为什么不按原样使用列表? 你真正想解决什么问题
  • 已经拥有列表中每个项目的名称。它们是mylist[0]mylist[1]mylist[2],等等。
  • 无论列表有多少元素,您是否希望前三个元素作为单独的变量,还是希望列表中每个元素有 n 个单独的变量?对于第一种情况,使用a, b, c = lst[:3]a, b, c, *_ = lst,对于后一种情况,只需使用列表本身。
  • 这能回答你的问题吗? How do I create a variable number of variables? tl;博士你真的想要一个列表

标签: python python-3.x list bots discord.py


【解决方案1】:

将列表的元素转换为单独的变量不会有任何用处。如果您想单独引用它们,那么您已经可以这样做了:

mylist[0]
mylist[1]
... #and so on

如果您希望为这些值分配变量以获得更好的可读性(即,mylist[0] 可能总是指用户名),那么使用对象而不是列表并调用 user.name

【讨论】:

    【解决方案2】:

    您提出的问题是您正在动态创建局部变量。如果你这样做,你的代码就无法确定。如果您在列表中有 4 个元素并创建了var1, var2, var3, var4,然后有 5 个元素,您将如何处理您的代码?

    话虽如此,您可以在运行时动态创建变量。这可能不是一个好主意:

    >>> my_list = [1,2,3,4]
    

    我有一个包含 4 个项目的列表。我可以在运行时基于它创建 var_0、var_1 等,方法是将元素分配给 locals() dict:

    >>> for i, element in enumerate(my_list):
    ...     locals()[f'var_{i}'] = element
    ... 
    >>> var_0
    1
    >>> var_1
    2
    >>> var_2
    3
    >>> var_3
    4
    >>> var_4
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'var_4' is not defined
    

    请注意,如果我的列表长一个元素,var_4 就会被定义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多