Python 如何+;=使用集合和列表
我得到一个连接列表和集合的有线情况。 例如,我有一个列表和一套Python 如何+;=使用集合和列表,python,list,set,python-3.4,Python,List,Set,Python 3.4,我得到一个连接列表和集合的有线情况。 例如,我有一个列表和一套 l = [1, 2, 3] s = {1, 2, 3, 4, 5} 当我运行如下代码时: l + s 我有一个错误(这是预料到的) TypeError:只能将列表(非“设置”)连接到列表 但当我使用+=时,我得到了结果 l += s # [1, 2, 3, 1, 2, 3, 4, 5] 我知道这是有区别的。在第一种情况下,我调用方法operator.add(l,s),在第二种情况下调用方法l.\uu iadd\uu(s)。
l = [1, 2, 3]
s = {1, 2, 3, 4, 5}
当我运行如下代码时:
l + s
我有一个错误(这是预料到的)
TypeError:只能将列表(非“设置”)连接到列表
但当我使用+=
时,我得到了结果
l += s # [1, 2, 3, 1, 2, 3, 4, 5]
我知道这是有区别的。在第一种情况下,我调用方法operator.add(l,s)
,在第二种情况下调用方法l.\uu iadd\uu(s)
。
但是有人能解释为什么会有两种不同的结果吗?为什么\uuu iadd\uuu
更改类型,但添加()
引发异常
更新
@Jon Clements关于list.extend
的观点是正确的。从
列表。扩展(L)
通过追加给定列表中的所有项来扩展列表。相当于a[len(a):]=L
最后,
l[len(s):]=s
像一个符咒一样工作l+s
=half-list-half-set。这不管用l+=s
=一个列表向其中添加了一组值。它将工作list
s+=
有效地调用list。将任何iterable作为+=
的extend
应该是一个就地操作,在这种情况下,可以通过调用.extend
而不是执行var=var+var2
(如果变量类型不兼容,则会失败)(实际上是list.\uu iadd\uu==list.extend
)不确定,但我认为这是因为l+s
不清楚结果应该是什么类型,因此Python就像“dude you do”,而l+=s
则清楚您想要什么(修改列表)所以Python就这么做了。@StefanPochmann这是不对的,因为当你试图调用“某个字符串”时+=12,它会给你一个异常。但是很明显,你想要一个字符串变量。@OleksandrDashkov在这种情况下,有一个不同的问题,即Python不知道如何将int转换为字符串以便将其附加到字符串中。将数字转换为字符串至少有两种标准方法:str(12)
和chr(12)
l+s
=半列表半集。它不起作用。l+=s
=一个列表向它添加了一组值。它将起作用list
s+=
有效地调用列表。扩展将任何iterable作为+=/code>应该是一个就地操作,在这种情况下,可以通过calli实现ng.extend
而不是执行var=var+var2
(如果变量的类型不兼容,则会失败)(实际上是list.\uuu\iadd\uuu==list.extend
)不确定,但我认为这是因为使用l+s
不清楚结果应该是什么类型,因此Python就像“老兄,你在做什么”,而使用l+=s
很清楚您想要什么(修改列表),所以Python就这么做了。@StefanPochmann这是不对的,因为当您尝试调用“some string”时+=12,它会给你一个异常。但是很明显,你想要一个字符串变量。@OleksandrDashkov在这种情况下,有一个不同的问题,即Python不知道如何将int转换为字符串以便将其附加到字符串中。将数字转换为字符串至少有两种标准方法:str(12)
和chr(12)
。