在Python中将列表项分配给变量

3 投票
6 回答
8361 浏览
提问于 2025-04-16 11:03

我刚接触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 个回答

5

通过 b,你已经有了一个很方便的列表,里面是你想要的项目。只需要在需要的时候,通过它们的索引 b[0], b[1], ... 来访问就可以了。把太多的变量放进命名空间,而这些变量的值其实可以很简单地存放在一个容器里,这在我看来是一种设计缺陷。


这里有一种方法可以把新的变量注入到当前模块的命名空间,但这是一种不好的做法

#!/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
# => ...
6

如果你真的想要单独的变量,某个时候你至少得做个拆包,比如 v1,v2,v3,v4,v5,v6,v7,v8,v9,v10 = some_list

但是你为什么要这么做呢?如果某样东西是一堆集合或列表,最好还是把它表示成一个集合或列表。

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]

然后你可以对这些blender对象随意操作。如果列表中的位置很重要,你可以使用enumerate()来给每个blender对象加上一个索引,这样就能知道它们在列表中的位置了。

撰写回答