【问题标题】:Most practical way to add a value to a particular list, based on a variable基于变量向特定列表添加值的最实用方法
【发布时间】:2021-08-05 16:07:44
【问题描述】:

标题可能听起来有点怪,但情况并没有那么多。

我有一些清单。 在这里它们被初始化(全局变量):

sensor0, sensor1, sensor2, sensor3 = ([] for i in range(4))

现在我们有一个变量来指示我可以插入数据的列表。假设它是selector = 3

这意味着我应该将我的值 append() 到 sensor3 列表中。

在 python 中最实用的方法是什么? 如果它是 C 风格的语言,我会使用 switch-case

但是python中没有switch-case语法。当然我可以做多个ifs,但这似乎不是最好的方法。

我想知道,由于列表中只有一个字母每次都会更改,也许有更好的方法可以根据 selector 变量选择正确的列表到 append() 到。

【问题讨论】:

  • 为什么不把它作为一个列表列表(sensors = [[] for i in range(4)]),然后是sensors[selector].append(data)
  • ...还是字典?
  • @Carcigenicate 谢谢!第一个命令是初始化吧?但是出现了一些问题,我想将所有这些列表作为全局变量传递给函数。我也可以用一个班轮做到这一点吗?
  • @user1584421 是的,第一位正在替换您的初始化。你可以让函数接受一个二维列表,或者做your_func(*sensors)* 将内部列表解包到参数列表中(在这种情况下,函数需要接受四个参数)。
  • @AndrejKesely 不确定我是否理解....

标签: python-3.x list if-statement switch-statement conditional-statements


【解决方案1】:

对于您的具体情况,请使用 eval

sensor0, sensor1, sensor2, sensor3 = ([] for i in range(4))
sensor3 = 20
selector =3 
result = eval("sensor"+str(selector))
print(result)

但使用列表可能是更好的选择。 使用列表

sensor = [[] for i in range(4)]
selector = 3
sensor[selector] = 20
print(sensor[selector])

【讨论】:

  • 谢谢。但是在您的第二个代码 sn-p 中,您确定第一行 (sensor = [c[] for i in range(4)]) 是正确的吗?我在 REPL 中输入了它,我得到了SyntaxError: invalid syntax
  • @user1584421 我不小心在 [] 之前输入了 c。已编辑答案,现在应该可以使用了。
  • 谢谢,但这不是一个好的解决方案,因为我无法将新值附加到列表中。当我尝试data= 100; sensor[selector].append(data) 时,我得到了AttributeError: 'int' object has no attribute 'append'
  • 那是因为您将 20 分配给了 sensor[3]。这意味着您的传感器变量包含[[], [], [], 20] 并且传感器[3] 不再是一个列表。您需要编辑问题并更好地解释您的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多