我试图通过在Colab Notebook中运行以下命令来了解Python中Reduce的过程。
pList20 = ["Ram", "RamPM", "Shyam", "PMShyam", "Sita", "SiPMMta"]
print(pList20)
pList21A = list(map(lambda x : (x,len(x)),pList20) ) # returns a list of tuples
print(pList21A)
pList21B = list(map(lambda x : (len(x),x),pList20) ) # returns a list of tuples
print(pList21B)
print('----')
print(pList21A)
pVal22A = functools.reduce(lambda x,y: (x[0]+y[0], x[1]+y[1]), pList21A) # adding and concatenating elements in a list
print(pVal22A)
print(pList21B)
pVal22B = functools.reduce(lambda x,y: (x[0]+y[0], x[1]+y[1]), pList21B) # adding and concatenating elements in a list
print(pVal22B)
print('----')
#print(pList21A)
#pVal22C = functools.reduce(lambda x,y: (x[1]+y[1], x[0]+y[0]), pList21A) # adding and concatenating elements in a list
#print(pVal22C)
print(pList21B)
pVal22D = functools.reduce(lambda x,y: (x[1]+y[1], x[0]+y[0]), pList21B) # adding and concatenating elements in a list
print(pVal22D)
前两个reduce函数按照预期进行,但最后两个函数却抛出了一个错误。输出和错误如下图所示。
无法找出问题所在
['Ram', 'RamPM', 'Shyam', 'PMShyam', 'Sita', 'SiPMMta']
[('Ram', 3), ('RamPM', 5), ('Shyam', 5), ('PMShyam', 7), ('Sita', 4), ('SiPMMta', 7)]
[(3, 'Ram'), (5, 'RamPM'), (5, 'Shyam'), (7, 'PMShyam'), (4, 'Sita'), (7, 'SiPMMta')]
----
[('Ram', 3), ('RamPM', 5), ('Shyam', 5), ('PMShyam', 7), ('Sita', 4), ('SiPMMta', 7)]
('RamRamPMShyamPMShyamSitaSiPMMta', 31)
[(3, 'Ram'), (5, 'RamPM'), (5, 'Shyam'), (7, 'PMShyam'), (4, 'Sita'), (7, 'SiPMMta')]
(31, 'RamRamPMShyamPMShyamSitaSiPMMta')
----
[(3, 'Ram'), (5, 'RamPM'), (5, 'Shyam'), (7, 'PMShyam'), (4, 'Sita'), (7, 'SiPMMta')]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-41-b1b1ac48507f> in <module>()
17 #print(pVal22C)
18 print(pList21B)
---> 19 pVal22D = functools.reduce(lambda x,y: (x[1]+y[1], x[0]+y[0]), pList21B) # adding and concatenating elements in a list
20 print(pVal22D)
<ipython-input-41-b1b1ac48507f> in <lambda>(x, y)
17 #print(pVal22C)
18 print(pList21B)
---> 19 pVal22D = functools.reduce(lambda x,y: (x[1]+y[1], x[0]+y[0]), pList21B) # adding and concatenating elements in a list
20 print(pVal22D)
TypeError: unsupported operand type(s) for +: 'int' and 'str'
我很抱歉,如果这是非常简单的事情,但如果有人能解释为什么+操作数在前两个reduce函数中被支持,但在后两个reduce函数中不支持,我将非常感激。
的输出 lambda x,y: (x[1]+y[1], x[0]+y[0])
调换组件的顺序。
(3, 'Ram')
和 (5, 'RamPM')
→ ('RamRamPM', 8)
.('RamRamPM', 8)
和 (5, 'Shyam')
给出了错误,因为它试图将 'RamRamPM' + 5
和 8 + 'Shyam'