Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在列表中添加数字,但保留其他元素_Python_Python 3.x_List_Sum - Fatal编程技术网

Python 在列表中添加数字,但保留其他元素

Python 在列表中添加数字,但保留其他元素,python,python-3.x,list,sum,Python,Python 3.x,List,Sum,我有以下清单: [["hari","cs",10,20],["krish","it",10],["yash","nothing"]] 我需要检查子列表中的数字并添加它们,即,我需要以下输出: [["hari","cs",30],["krish","it",10],["yash","nothing",0]] 我不知道如何处理这个问题。您可以迭代每个子列表并对数字求和(基于isinstance检查),并保持非数字不变: l = [["hari","cs",10,20],["krish","it"

我有以下清单:

[["hari","cs",10,20],["krish","it",10],["yash","nothing"]]
我需要检查子列表中的数字并添加它们,即,我需要以下输出:

[["hari","cs",30],["krish","it",10],["yash","nothing",0]]

我不知道如何处理这个问题。

您可以迭代每个子列表并对数字求和(基于
isinstance
检查),并保持非数字不变:

l = [["hari","cs",10,20],["krish","it",10],["yash","nothing"]]
newl = []
for subl in l:
    newsubl = []
    acc = 0
    for item in subl:
        if isinstance(item, (int, float)):
            acc += item
        else:
            newsubl.append(item)
    newsubl.append(acc)
    newl.append(newsubl)
print(newl)
# [['hari', 'cs', 30], ['krish', 'it', 10], ['yash', 'nothing', 0]]
如果您喜欢生成器函数,可以将其分为两个函数:

l = [["hari","cs",10,20],["krish","it",10],["yash","nothing"]]

def sum_numbers(it):
    acc = 0
    for item in it:
        if isinstance(item, (int, float)):
            acc += item
        else:
            yield item
    yield acc

def process(it):
    for subl in it:
        yield list(sum_numbers(subl))

print(list(process(l)))
# [['hari', 'cs', 30], ['krish', 'it', 10], ['yash', 'nothing', 0]]
试试这个:

l = [["hari","cs",10,20],["krish","it",10],["yash","nothing"]]
sums = [sum([x for x in _l if type(x) == int]) for _l in l]
without_ints = map(lambda _l: filter(lambda x: type(x) == int, _l, l))
out = [w_i + [s] for (s, w_i) in zip(sums, without_ints)]
>>> out
[['hari', 'cs', 30], ['krish', 'it', 10], ['yash', 'nothing', 0]]

希望有帮助

这是我写过的最大的一行

假设所有数字都在每个列表的末尾,这应该可以做到

my_list = [["hari","cs",10,20],["krish","it",10],["yash","nothing"]]

new_list = [[element if type(element) != int else sum(inner_list[inner_list.index(element):]) for element in inner_list if type(inner_list[inner_list.index(element) - 1 if type(element) == int else 0]) != int] for inner_list in my_list]

print(new_list)  # [['hari', 'cs', 30], ['krish', 'it', 10], ['yash', 'nothing']]

数字总是在每个列表的末尾吗?是的@StamKaly,关于模式你是对的。
l = [["hari","cs",10,20],["krish","it",10],["yash","nothing"]]
sums = [sum([x for x in _l if type(x) == int]) for _l in l]
without_ints = map(lambda _l: filter(lambda x: type(x) == int, _l, l))
out = [w_i + [s] for (s, w_i) in zip(sums, without_ints)]
>>> out
[['hari', 'cs', 30], ['krish', 'it', 10], ['yash', 'nothing', 0]]
my_list = [["hari","cs",10,20],["krish","it",10],["yash","nothing"]]

new_list = [[element if type(element) != int else sum(inner_list[inner_list.index(element):]) for element in inner_list if type(inner_list[inner_list.index(element) - 1 if type(element) == int else 0]) != int] for inner_list in my_list]

print(new_list)  # [['hari', 'cs', 30], ['krish', 'it', 10], ['yash', 'nothing']]