嗨我有一个数字列表,其中有一些'无',我想用列表中不是'无'的其他数字替换。
例如,对于以下列表:
listP = [ 2.5, 3, 4, None, 4, 8.5, None, 7.3]
我希望将两个None
项替换为列表中不是None
的随机数。所以在这个例子中,None可以用2.5或3或4或8.5或7.3代替。
无论如何都要在一行代码中执行此操作吗?
答案 0 :(得分:5)
您需要使用两个步骤;提取random.choice()
的非None值以进行选择,然后使用列表推导来实际选择随机值:
import random
numbers = [n for n in listP if n is not None]
result = [n if n is not None else random.choice(numbers) for n in listP]
答案 1 :(得分:1)
您可以先filter
列表构建一个非None
值列表,然后使用choice
随机选择:
import random
listP = [ 2.5, 3, 4, None, 4, 8.5, None, 7.3]
listR = filter(lambda x: x is not None, listP)
print([l if l is not None else random.choice(listR) for l in listP])
结果:
[2.5, 3, 4, 7.3, 4, 8.5, 4, 7.3]
答案 2 :(得分:0)
使用列表推导
>>> [x if x else 'WHATEVER' for x in [ 2.5, 3, 4, None, 4, 8.5, None, 7.3]]
[2.5, 3, 4, 'WHATEVER', 4, 8.5, 'WHATEVER', 7.2999999999999998]
答案 3 :(得分:0)
您可以使用以下内容:
import random
listP = [2.5, 3, 4, None, 4, 8.5, None, 7.3]
numbers = [num for num in listP if num is not None]
answer = [el if el is not None else random.choice(numbers) for el in listP]
print(answer)
示例输出
[2.5, 3, 4, 3, 4, 8.5, 8.5, 7.3]
这会通过过滤掉numbers
中的None
值来创建listP
列表。然后,它会使用random.choice()
的列表推导来填充None
值,并从numbers
中随机选择。
答案 4 :(得分:-1)
None
以外的列表中获取任何值。我使用max
函数来实现此目的。None
None
值替换为最大值。<强>演示强>:
>>> listP = [ 2.5, 3, 4, None, 4, 8.5, None, 7.3]
>>> l_max = max(listP)
>>> if l_max:
... listP = [n if n is not None else max(listP) for n in listP]
...
>>> listP
[2.5, 3, 4, 8.5, 4, 8.5, 8.5, 7.3]
>>>
max
是内置功能。</ li>
List Comprehension