Bu işlevselliği elde etmek için map
ve sum
kullanabiliyorum, ancak reduce
nasıl kullanılır?Python, bir tuple listesinde nasıl azaltılabilir?
2 liste var: a
, b
, aynı sayıda değer var. Ben
a[0]*b[0]+a[1]*b[1]+...+a[n]*b[n]
map
kullanarak yazdım çalışma versiyonunu hesaplamak için
value = sum(map(lambda (x,y): x*y, zip(a, b)))
nasıl ardından
reduce
kullanmaktır istiyor? Yazdığım:
value = reduce(lambda (x,y): x[0]*y[0] + x[1]*y[1], zip(a, b)))
hatasını "TypeError: 'float' object is unsubscriptable
" var.
Bu konuda biraz ışık tutabilir mi? (Ben lambda gerek olduğunu sanmıyorum)
value = reduce(lambda sum, (x, y): sum + x*y, zip(a, b), 0)
Lambda'nız iki iki elemanlı tupl alır. Bu, listenin ilk iki unsurunu azaltırken iyi çalışır, ancak şimdi bir sonraki azalma lambda (bir float) ve listenin bir sonraki öğesi (bir tuple) sonucu üzerinde çalışacaktır ve lambda'nız Bunu hallet. Lambda'nızın bir sayı ve bir sayı alması ve sayıyı başlangıç değerine sahip olması gerekir (antonakos'un cevabı gibi). – dfan