Python替换列表中的数字

时间:2016-03-04 10:54:48

标签: python list random list-comprehension

嗨我有一个数字列表,其中有一些'无',我想用列表中不是'无'的其他数字替换。

例如,对于以下列表:

listP = [ 2.5,  3,  4, None, 4, 8.5, None, 7.3]

我希望将两个None项替换为列表中不是None的随机数。所以在这个例子中,None可以用2.5或3或4或8.5或7.3代替。

无论如何都要在一行代码中执行此操作吗?

5 个答案:

答案 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)

  1. None以外的列表中获取任何值。我使用max函数来实现此目的。
  2. 检查最大值不是None
  3. 使用list comprehension创建新列表,将None值替换为最大值。
  4. <强>演示

    >>> 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]
    >>> 
    
    1. max是内置功能。<​​/ li>
    2. List Comprehension