将列表项分发给python中的变量

时间:2011-02-02 00:00:15

标签: python

我是Python的新手,我正在寻找一种方法将列表中的项目分配到单个变量中。这一点是在Blender中将各个项目显示为文本对象。这是我到目前为止所拥有的,但我知道这是一个更有效的方法。

file = open('lyrics.conf')
data = file.read()
file.close()
b = data.split('/')
v = len(b)

if v >= 1:
  v1 = b[0]
if v >= 2:
  v2 = b[1]
if v >= 3:
  v3 = b[2]
if v >= 4:
  v4 = b[3]
if v >= 5:
  v5 = b[4]
if v >= 6:
  v6 = b[5]
if v >= 7:
  v7 = b[6]
if v >= 8:
  v8 = b[7]
if v >= 9:
  v9 = b[8]
if v >= 10:
  v10 = b[9]

6 个答案:

答案 0 :(得分:5)

使用b,您已经拥有了一个易于访问的所需项目列表。只需在他们的索引b[0], b[1], ...处需要它们时访问它们。使用太多变量填充命名空间,其值可以在没有重大问题的情况下存储在容器中,这是一个设计缺陷(在我看来)。


这是一种将新变量注入当前模块命名空间的方法,但它是 evil

#!/usr/bin/env python

import sys

somelist = range(10)

for i, item in enumerate(somelist):
    setattr(sys.modules[__name__], 'v{0}'.format(i), item)

print v1 + v2
# => 3

print v1 * v2 * v3 * v4 * v5 * v6 - v7 * v8 - v9 + 11
# => ...

答案 1 :(得分:5)

如果你真的想要个别变量,在某些时候你至少要做一个像v1,v2,v3,v4,v5,v6,v7,v8,v9,v10 = some_list这样的解包

但你为什么要这样做呢?如果某事物是一个集合/事物清单,最好用它来表示。

答案 2 :(得分:3)

拥有这些v1..10变量对我来说似乎是一种代码味道,但你可以试试这个

try:
  v1 = b[0]
  v2 = b[1]
  v3 = b[2]
  v4 = b[3]
  v5 = b[4]
  v6 = b[5]
  v7 = b[6]
  v8 = b[7]
  v9 = b[8]
  v10 = b[9]
except IndexError:
  pass

答案 3 :(得分:1)

要处理一系列经文,请逐节:

with open('lyrics.conf') as f:
    data = file.read()
verses = data.split('/')
def build_blender_object(verse):
  # Put meaningful code here
  pass
blender_objects = [build_blender_object(v) for v in verses]

然后用搅拌机对象做任何你想做的事。如果列表中的位置很重要,那么您可以使用enumerate()将索引与每个blender对象相关联。

答案 4 :(得分:0)

只是为了好玩

b = "Some text/ with a / slash / character".split('/')
for i in range(len(b)):
    globals()['v' + str(i + 1)] = b[i]

答案 5 :(得分:0)

变量是否可以存在并设置为无?

v1,v2,v3,v4,v5,v6,v7,v8,v9,v10 = (b+[None]*10)[:10]

v1,v2,v3,v4,v5,v6,v7,v8,v9,v10 = b+[None]*(10-len(b))