我的印象是,如果我使用var txt = "Hey"
@IBOutlet weak var Text: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
showText()
}
func showText(){
Text.text = txt
}
@IBAction func Button(_ sender: UIButton) {
txt = "Hello"
showText()
}
,我会得到列表列表中的元素总和,如下所示:
reduce
但是我收到的错误是:
reduce(lambda x, y: x[0]+y[0], [[1],[2],[3],[4],[5]])
在这种情况下,减少做什么?如果我想总结一下,避免TypeError: 'int' object has no attribute '__getitem__'
循环的最佳方法是什么?
答案 0 :(得分:2)
如果你想像那样使用reduce,你必须提供初始值:
>>> list_of_lists = [[1],[2],[3],[4],[5]]
>>> reduce(lambda x, y: x+y[0], list_of_lists, 0)
15
但请勿使用reduce
。只需使用内置的sum
:
>>> sum(n for sublist in list_of_lists for n in sublist)
15
>>> sum(n for [n] in list_of_lists) # enforcing 1-element sublists
15
答案 1 :(得分:0)
没有太多理由将所有内容都放在子列表中。这就是你想要的。
reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
如果您所做的只是对列表的元素求和,那么Python就有内置功能。</ p>
sum([1, 2, 3, 4, 5])
如果你真的有理由需要列表列表,那么你需要将累积值作为列表。可以这样想:你传递给reduce
的函数通常应该返回一个相同“类型”的值(在这里使用“类型”这个词)作为第一个参数,因为它稍后会传入作为另一个电话的第一个参数。
reduce(lambda x, y: [x[0]+y[0]], [[1], [2], [3], [4], [5]])