我有一个对象,它有16个双重属性,我想随机选择其中一个,所以我创建了一个方法,在0-15之间创建一个随机数,但这种方法并不是我想要的,我认为它是&#39 ;如果你们有另一个最干净的方法,那就是一个非常脏的方法
cellForRowAtIndexPath
答案 0 :(得分:2)
您只需从vars(self)
dictionary中选择一个随机属性,过滤与模式匹配的名称:
def getRandomRate(self):
return random.choice([v for attr, v in vars(self).items()
if len(attr) == 8 and attr[3:5] == 'To'])
这会从名称长度为8个字符的所有属性中选择一个随机值,并在中间包含单词To
。
使用您班级的简短演示:
>>> import random
>>> c = Currencies()
>>> vars(c)
{'EURToBTC': u'0.0108027', 'BTCToJPY': u'12816.8350063', 'JPYToJPY': 1.0, 'USDToBTC': u'0.0094131', 'JPYToBTC': u'0.0000702', 'BTCToUSD': u'125.2057142', 'USDToUSD': 1.0, 'USDToJPY': u'116.1736146', 'EURToEUR': 1.0, 'JPYToUSD': u'0.0084464', 'BTCToEUR': u'92.3549138', 'USDToEUR': u'0.8820255', 'BTCToBTC': 1.0, 'JPYToEUR': u'0.0065705', 'EURToUSD': u'1.2338648', 'EURToJPY': u'126.4193644'}
>>> [v for attr, v in vars(c).items() if len(attr) == 8 and attr[3:5] == 'To']
[u'0.0108027', u'12816.8350063', 1.0, u'0.0094131', u'0.0000702', u'125.2057142', 1.0, u'116.1736146', 1.0, u'0.0084464', u'92.3549138', u'0.8820255', 1.0, u'0.0065705', u'1.2338648', u'126.4193644']
>>> random.choice([v for attr, v in vars(c).items() if len(attr) == 8 and attr[3:5] == 'To'])
u'0.0108027'
因此,列表理解为每个转化率提取了16个值,然后random.choice()
随机选择其中一个。