在 Python 中将多个变量附加到列表中

Posted

技术标签:

【中文标题】在 Python 中将多个变量附加到列表中【英文标题】:Append several variables to a list in Python 【发布时间】:2013-01-29 09:45:54 【问题描述】:

我想将几个变量附加到一个列表中。变量的数量不同。所有变量都以“volume”开头。我在想也许是通配符或其他东西可以做到。但我找不到这样的东西。任何想法如何解决这个问题?请注意,在此示例中它是三个变量,但也可以是五个或六个或任何值。

volumeA = 100
volumeB = 20
volumeC = 10

vol = []

vol.append(volume*)

【问题讨论】:

如果你能举一个更接近你情况的例子,它可能会有所帮助。即,你是如何得到数量不定但名称不为人知的变量的? 【参考方案1】:

虽然你可以做到

vol = []
vol += [val for name, val in globals().items() if name.startswith('volume')]
# replace globals() with locals() if this is in a function

更好的方法是使用字典而不是类似命名的变量:

volume = 
    'A': 100,
    'B': 20,
    'C': 10


vol = []
vol += volume.values()

请注意,在后一种情况下,项目的顺序是未指定的,即您可以获得[100,10,20][10,20,100]。要按键的顺序添加项目,请使用:

vol += [volume[key] for key in sorted(volume)]

【讨论】:

+1;如果你有一堆变量的名字按某种顺序排列,那你几乎肯定做错了。 变量来自其他计算(我没有在此处发布)。如果我要使用字典,我会遇到先将它们放入字典的问题。【参考方案2】:

EDIT 从列表理解中删除了 filter,因为它强调这是一个令人震惊的想法。

我已经改变了它,所以它与其他所有答案都不太相似。

volumeA = 100
volumeB = 20
volumeC = 10

lst =  map(lambda x : x[1], filter(lambda x : x[0].startswith('volume'), globals().items()))
print lst

输出

[100, 10, 20]

【讨论】:

你的评论让我意识到我错了 :D - 明天是情人节,微笑吧。 为了继续使用filter而改用map更丑。我认为 JBernardo 的观点是推导式已经内置了一个可选的 if 子句,所以使用它而不是 filter 情人节前夕,我以为爱是要在空气中飘荡的,显然不是盲目的爱。 :/你当然是对的,我明白了 JBernardo 的观点,但我认为我会在缺乏吸引力的情况下保持一致性。【参考方案3】:

您可以使用extend 将任何可迭代对象附加到列表中:

vol.extend((volumeA, volumeB, volumeC))

根据你的变量名的前缀对我来说有一种不好的代码味道,但你可以做到。 (附加值的顺序未定义。)

vol.extend(value for name, value in locals().items() if name.startswith('volume'))

如果顺序很重要(恕我直言,仍然闻起来不对):

vol.extend(value for name, value in sorted(locals().items(), key=lambda item: item[0]) if name.startswith('volume'))

【讨论】:

如果列表中已经有一些元素怎么办?我试了一下,报错TypeError: 'int' object is not iterable【参考方案4】:

您想添加变量的名称以及它们的值吗?

output=[]

output.append([(k,v) for k,v in globals().items() if k.startswith('volume')])

或者只是值:

output.append([v for k,v in globals().items() if k.startswith('volume')])

【讨论】:

【参考方案5】:

如果我得到适当的问题,您正在尝试将不同变量中的不同值附加到列表中。让我们看看下面的例子。 假设:

email = 'example@gmail.com'
pwd='Mypwd'

list = []

list.append(email)
list.append (pwd)

for row in list:
      print(row)

 # the output is :
 #example@gmail.com
 #Mypwd

希望对你有帮助,谢谢。

【讨论】:

以上是关于在 Python 中将多个变量附加到列表中的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 2.7.3 中将 csv 文件附加到一个空列表中 - 获取一个空列表

在 Python 中将列表附加到自身

如何在循环中将不同大小的列表附加到空熊猫数据框的每一列?

在 Numpy Python 中将一维数组附加到二维数组

可以一次附加多个列表吗? (Python)

Python:有没有更好的方法将多个不同的对象附加到列表中