Python 在列表中组合列表的各个部分

Python 在列表中组合列表的各个部分,python,python-3.x,list,for-loop,indexing,Python,Python 3.x,List,For Loop,Indexing,给出如下列表: [['james',100,200,300],['james',200,300,400], ['charles',200,200,100]] 我需要添加具有相同第一个索引的两个列表的组件,如下所示: [['james',300,500,700],['charles',200,200,100]] 谢谢你的回答。刚刚发现我必须这样做,而不导入任何模块。有没有办法做到这一点?我已尝试使用for循环,但找不到要索引的内容。您可以使用collections.defaultdict: 输

给出如下列表:

[['james',100,200,300],['james',200,300,400], ['charles',200,200,100]]
我需要添加具有相同第一个索引的两个列表的组件,如下所示:

[['james',300,500,700],['charles',200,200,100]]
谢谢你的回答。刚刚发现我必须这样做,而不导入任何模块。有没有办法做到这一点?我已尝试使用for循环,但找不到要索引的内容。

您可以使用collections.defaultdict:

输出:

[['james', 300, 500, 700], ['charles', 200, 200, 100]]
l = [['james',100,200,300],['james',200,300,400], ['charles',200,200,100]]
不导入任何模块:

l = [['james',100,200,300],['james',200,300,400], ['charles',200,200,100]]


d = {}
for k, *v in l:
    d.setdefault(k, []).append(v)

[[k, *[sum(e) for e in zip(*v)]] for k, v in d.items()]
输出:

[['james', 300, 500, 700], ['charles', 200, 200, 100]]
l = [['james',100,200,300],['james',200,300,400], ['charles',200,200,100]]

嗯。。。没有进口听起来像是家庭作业。Python是关于重用的。然而,只是为了好玩:

data = [['james', 100, 200, 300], ['james', 200, 300, 400], ['charles', 200, 200, 100]]


def combine_lists(data, result=None):
    if result is None:
        result = []
    if data:
        return combine_lists(data[1:], _add_sublist(data[0], result))
    return result


def _add_sublist(sublist, result):
    result_out = []
    combined = False
    for result_sublist in result:
        if sublist[0] == result_sublist[0]:
            result_out.append([sublist[0], *[from_elt + into_elt
                                             for from_elt, into_elt in zip(sublist[1:], result_sublist[1:])]])
            combined = True
        else:
            result_out.append(result_sublist)
    if not combined:
        result_out.append(sublist)
    return result_out
使用数据在shell中运行函数:

In [4]: combine_lists(data)                                                                                                                        
Out[4]: [['james', 300, 500, 700], ['charles', 200, 200, 100]]
在提交代码之前,请确保您理解代码:

data=[['james',100,200,300],['james',200,300,400], ['charles',200,200,100]]
dic={}
for sample in data:
    if sample[0] in dic.keys():
        dic[sample[0]] = [x+y for x,y in zip(dic[sample[0]],sample[1:])]
    else:
        dic[sample[0]] = sample[1:]
data= [[x]+y for x,y in dic.items()]
说明:for循环迭代列表中的所有元素。使用每个列表的第一个元素,我们检查“dic”是否将此名称作为键。如果是,我们将添加到键的先前值,否则使用值“sample[1:]”创建键。最后一步将字典“dic”转换为所需列表

dic={} 对于a中的行: 如果dic中的第[0]行: dic[第[0]行]=[邮政编码中n的sumn*[dic[第[0]行]],第[1]行] 其他: dic[行[0]]=行[1:] ans=[] 对于输入dic: ans.append[key,*dic[key]] 您可以创建一个以名称为键,以后续数字为值的字典。 最后,您可以将字典转换为列表列表


[sumn for n in zip*[dic[row[0]],row[1:]]用于汇总两个对应列表的元素,请参阅此处:

是什么阻止了您这样做?请发布您当前的解决方案尝试。Stackoverflow在这里帮助您回答问题,而不是为您解决问题。稍微简单一点:d=defaultdictlambda:[0,0,0],然后循环体d[k][:]=mapoperator.add,d[k],v将为您提供总和,而无需其他列表理解。没有充分的理由避免从标准库导入模块。至少,补充并不是真的必要;这比使用lambda x,y:x=y更有效。@chepner我同意你的观点,我想这是学校的另一项任务,这些老师。。。