【发布时间】:2016-06-27 09:06:47
【问题描述】:
我有一个清单
data=['_','_','A','B','C',1,2,3,4,5]
我需要在 1,2,3,4,5 中随机取一个整数 列表不断修改,所以我不能简单地从最后 5 个成员中选择
这是我尝试过的,但在检索其他成员时会引发错误:
inp2=int(random.choice(data))
【问题讨论】:
我有一个清单
data=['_','_','A','B','C',1,2,3,4,5]
我需要在 1,2,3,4,5 中随机取一个整数 列表不断修改,所以我不能简单地从最后 5 个成员中选择
这是我尝试过的,但在检索其他成员时会引发错误:
inp2=int(random.choice(data))
【问题讨论】:
您可以过滤非整数项;
inp2 = ramdom.choice([x for x in data if isinstance(x, int)])
【讨论】:
虽然和Neo的回答差不多,但是你也可以试试这个:
inp2 = random.choice(filter(lambda d: isinstance(d, int), data))
【讨论】:
创建最后 5 个元素的列表。
>>> from random import choice
>>> data=['_','_','A','B','C',1,2,3,4,5]
>>> l = len(data)
>>> data[(l-5):l]
[1, 2, 3, 4, 5]
>>> k = data[(l-5):l]
>>> choice(k)
5
>>> choice(k)
2
>>>
【讨论】:
random.choice([i for i in data[-5:] if isinstance(x, int)])
通过isinstance()检查数据类型[-5:]更安全。
【讨论】:
试试这个。
import operator
inp2 = random.choice(filter(operator.isNumberType, data))
对于这个特定的问题,选择最后 5 个元素也是一个很好的解决方案。
inp2 = random.choice(data[5:])
【讨论】:
int、float、long 等。但此处 OP 只需要 int 类型。
我认为最好的解决方案是创建另一个列表,其中只有您想从中选择的 int 值。 我不知道您指定的任务,但例如,如果您有添加到列表的方法,只需添加:
def add(self, element):
self.data.append(element)
if type(element) == int:
self.data_int.append(element)
然后只需使用:
def get_value(self):
return random.choice(self.data_int)
【讨论】: