我是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]
答案 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))