对.join()感到困惑

时间:2018-08-25 14:11:10

标签: python

我是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'

3 个答案:

答案 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还是某个字符串,它都不会影响顺序。字典的顺序本质上是任意的。它无法预先预测,这是因为字典是如何存储在内存中的。