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']]