如何通过while循环动态创建变量?

2024-04-25 12:13:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我想通过Python中的while循环动态创建变量。有人有什么创造性的方法来做这个吗?


Tags: 方法动态创建while创造性
3条回答

使用globals()可以:

import random

alphabet = tuple('abcdefghijklmnopqrstuvwxyz')


print '\n'.join(repr(u) for u in globals() if not u.startswith('__'))

for i in xrange(8):
    globals()[''.join(random.sample(alphabet,random.randint(3,26)))] = random.choice(alphabet)

print

print '\n'.join(repr((u,globals()[u])) for u in globals() if not u.startswith('__'))

一个结果:

'alphabet'
'random'

('hadmgoixzkcptsbwjfyrelvnqu', 'h')
('nzklv', 'o')
('alphabet', ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'))
('random', <module 'random' from 'G:\Python27\lib\random.pyc'>)
('ckpnwqguzyslmjveotxfbadh', 'f')
('i', 7)
('xwbujzkicyd', 'j')
('isjckyngxvaofdbeqwutl', 'n')
('wmt', 'g')
('aesyhvmw', 'q')
('azfjndwhkqgmtyeb', 'o')

我使用random是因为你没有解释要给出哪些“变量”的名称,以及要创建哪些值。因为我认为不将名称绑定到对象就不可能创建名称。

使用exec()方法。例如,假设您有一个字典,并且希望将每个键转换为一个具有其原始字典值的变量,可以执行以下操作。

Python 2

>>> c = {"one": 1, "two": 2}
>>> for k,v in c.iteritems():
...    exec("%s=%s" % (k,v))

>>> one
1
>>> two
2

Python 3

>>> c = {"one": 1, "two": 2}
>>> for k,v in c.items():
...    exec("%s=%s" % (k,v))

>>> one
1
>>> two
2

除非迫切需要创建一堆变量名,否则我只需要使用字典,在字典中,您可以动态创建键名并将每个键名关联一个值。

a = {}
k = 0
while k < 10:
    <dynamically create key> 
    key = ...
    <calculate value> 
    value = ...
    a[key] = value 
    k += 1

新的“collections”模块中还有一些有趣的数据结构可能适用:

http://docs.python.org/dev/library/collections.html

相关问题 更多 >