在Python中向列表中添加元素

3
under__list =[[74, 0.1423287845938018, None, None, 10, 
   1.9099604642265018, 0.5185563065935468, 1.6825659992347914, 
   3.547506695574544, 2.7789822726693023, 20051, 0, 25, None, ' >50K'],
  [44, 0.9181229773462783, None, None, 14, 0.17973300970873787, 
   0.1644822006472492, 0.13940129449838187, 1.1252427184466018, 
   0.4357200647249191, 0, 0, 40, None, ' <=50K']]

我有上面的列表,但我想把元素相加,跳过None">=50"的元素。
即使不知道何处存在None数字值,我也希望能进行操作。 有什么建议吗?
for item in zip(under__list[row]):
    under__list.append(int(sum(item[0])))

寻找以下输出:
[1182, 25.2452245, None, None, 9212, 256, 2624, 25.24,
   2532, 25, 2005252, 52, 25632, None, ' >50K']

这将是一个数值相加的列表。

3
请提供此输入所需输出的示例;特别是不清楚您希望执行哪种add操作。 - Scott Hunter
3个回答

1
for item in under_list:
    item_ = filter(lambda x: x != None and x >= 50, under_list)
    # Here compute sum of item_ and append to the right place

1
看起来你想要对所有内部列表中相同索引的项进行求和。首先,你需要使用zip*,然后在列表推导式中检查每行的第一项是否为Number类型的实例或者简单地是intfloat(isinstance(x[0], (int, float))),如果是,则将它们相加,否则将第一项作为值。
>>> from numbers import Number
>>> [sum(x) if isinstance(x[0], Number) else x[0] for x in zip(*under__list)]
[118, 1.0604517619400802, None, None, 24, 2.0896934739352395, 0.683038507240796, 1.8219672937331732, 4.672749414021146, 3.2147023373942214, 20051, 0, 65, None, ' >50K']

表达式sum(x) if isinstance(x[0], Number) else x[0]被称为条件表达式

1
编写一个函数以返回您所需的内容:
def foo(thing):
    try:
        return sum(thing)
    except TypeError:
        return thing[0]

将函数映射到压缩的under__list行的rows
>>> under__list =[[74, 0.1423287845938018, None, None, 10, 1.9099604642265018, 0.5185563065935468, 1.6825659992347914, 3.547506695574544, 2.7789822726693023, 20051, 0, 25, None,' >50K'], [44, 0.9181229773462783, None, None, 14, 0.17973300970873787, 0.1644822006472492, 0.13940129449838187, 1.1252427184466018, 0.4357200647249191, 0, 0, 40, None, ' <=50K']]

>>> map(foo, zip(*under__list))
[118, 1.0604517619400802, None, None, 24, 2.0896934739352395, 0.683038507240796, 1.8219672937331732, 4.672749414021146, 3.2147023373942214, 20051, 0, 65, None, ' >50K']
>>>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接