我是python的新手,完全感到困惑,
为什么','.join('a','b','c')
出现错误,而没有",".join(['a','b','c'])
。
为什么下面的代码具有相同的输出?
In [3]: ",".join({'a':1,'b':2,'c':3})
Out[3]: 'b,a,c'
In [4]: ",".join({'a':2,'b':1,'c':3})
Out[4]: 'b,a,c'
In [5]: ",".join({'a':3,'b':2,'c':1})
Out[5]: 'b,a,c'
答案 0 :(得分:5)
args
上的 The docs指出该方法采用 an str.join
,这是可以迭代的任何类型(列表,元组等):
iterable
返回一个字符串,该字符串是可迭代的字符串的串联。如果有可迭代的任何非字符串值(包括字节对象),则会引发
str.join(iterable)¶
。元素之间的分隔符是提供此方法的字符串。
在您的第一个示例中,您将三个参数传递给一个期望有一个TypeError
的方法,而您在示例中使用了该方法,即通过列表(通过使用方格来表示)括号)。在键入的示例中,您传递的字典也是可迭代的,但是,当迭代时,它们会产生其键(请注意:顺序不确定)。因此,说出TypeError
的键是:{'a':1,'b':2,'c':3}
,'a'
和'b'
,并且由于它们都是字符串,因此该方法可以很好地将它们与逗号连接在一起>
答案 1 :(得分:3)
由于','.join('a','b','c')
,您向str
提供了 3个参数,每个参数都是str.join()
,这是意外的(预期1)
使用','.join(['a','b','c'])
,您只提供了 1个参数,它是一个list
,效果很好。
答案 2 :(得分:2)
join
仅接受一个可迭代类型的参数。 ','.join('a','b','c')
给出了3个字符串类型而不是1的参数。而",".join(['a','b','c'])
仅给出了1个list类型的参数,这是一个可迭代的。单引号或双引号没有区别。
对于第二个问题,由于键存储的值没有区别,因此所有3个字典的输出都相同。因此,无论键的值为1或3还是某个字符串,它都不会影响顺序。字典的顺序本质上是任意的。它无法预先预测,这是因为字典是如何存储在内存中的。