替换列表值

时间:2017-07-28 18:56:35

标签: python

我有:

a=[['2017-07-25 23:48:36+00:00', 48L],
   ['2017-07-25 23:53:36+00:00', 53L], 
   ['2017-07-25 23:54:36+00:00', None]]

我需要保留时间戳。但是将其他值更改为“无”'到' 0'然后乘以0.1。所以它变成了:

formatted_a = [['2017-07-25 23:48:36+00:00', 4.8L],
               ['2017-07-25 23:53:36+00:00', 5.3L], 
               ['2017-07-25 23:54:36+00:00', 0]] 

我在view.py中有代码:

def replace(a):
    return [0 if y is None else 0.1*y for x, y in a]
formatted_a = list(replace(a) for a in a)

我收到了ValueError:ValueError:要解压缩的值太多

4 个答案:

答案 0 :(得分:2)

内部列表不需要列表理解。使用列表comp。就像你已经完成的那样,你一次只能在内部列表中迭代一个项目,但是,这两个项目都不能解压缩成两个项目:

def replace(lst):
    x, y = lst
    return [x, 0 if y is None else 0.1*y]
formatted_a = [replace(x) for x in a]

print(formatted_a)
# [['2017-07-25 23:48:36+00:00', 4.800000000000001], 
#  ['2017-07-25 23:53:36+00:00', 5.300000000000001], 
#  ['2017-07-25 23:54:36+00:00', 0]]

或者您可以使用单个列表推导传递整个列表:

def replace(a):
    return [[x, 0 if y is None else 0.1*y] for x, y in a]
formatted_a = replace(a) 

答案 1 :(得分:0)

您忘记解压缩子列表,因此它变为

def replace(lst):
    x, y = lst
    return [x,0] if y is None else [x,0.1*y]

a=[['2017-07-25 23:48:36+00:00', 48L],
   ['2017-07-25 23:53:36+00:00', 53L],
   ['2017-07-25 23:54:36+00:00', None]]

formatted_a = [replace(x) for x in a]
print formatted_a

答案 2 :(得分:0)

你做错了,因为你要从数组中解包两个参数,这将导致这个。 这是正确的答案:

a=[['2017-07-25 23:48:36+00:00', 48L],
   ['2017-07-25 23:53:36+00:00', 53L],
   ['2017-07-25 23:54:36+00:00', None]]

    def replace(a):
        return [0 if y is None else 0.1*y if x == 1 else y for x, y in enumerate(a)]
    formatted_a = list(replace(a) for a in a)
    print formatted_a

答案 3 :(得分:0)

您可以在python中使用itertools迭代列表列表。 这是代码:

In [61]: import itertools

In [80]: def replace(a):
    ...:     l = []
    ...:     for i in itertools.chain(a):
    ...:         l.append(map(lambda x:x if x != None else '0', i))
    ...:
    ...:     return l
    ...:
    ...:
    ...:

a = [['2017-07-25 23:48:36+00:00', 48L],
   ['2017-07-25 23:53:36+00:00', 53L],
   ['2017-07-25 23:54:36+00:00', None]]

In [81]: replace(a)

这是输出:

Out[81]:
[['2017-07-25 23:48:36+00:00', 48L],
 ['2017-07-25 23:53:36+00:00', 53L],
 ['2017-07-25 23:54:36+00:00', '0']]