这些代码之间有什么区别?为什么它们有不同的输出?

时间:2019-01-19 05:11:31

标签: python python-3.x

list = ['first', 'second', 'third', 'fourth']
s = '/'
newList = s.join(list)
print(newList)

此代码输出

"first/second/third/fourth"

list = ['first', 'second', 'third', 'fourth']
s = '/'
newList = s.join(str(list))
print(newList)

此代码输出

 "[/'/f/i/r/s/t/'/,/ /'/s/e/c/o/n/d/'/,/ /'/t/h/i/r/d/'/,/ /'/f/o/u/r/t/h/'/]"

str()在这里的作用是使列表由每个字母分开?

3 个答案:

答案 0 :(得分:3)

str()创建一个类似于"['first', 'second', 'third', 'fourth']"的字符串。

然后s.join()将该字符串视为char数组。然后将'/'放在数组中的每个元素之间。

答案 1 :(得分:1)

str将其参数转换为其字符串表示形式。列表的字符串表示形式是一个单个字符串,其开头为方括号,结尾为结尾。两者之间的元素使用repr进行转换,并用,分隔。该字符串本身就是一个可迭代的字符。这样,join会将/放在可迭代的每个元素之间,即字符串的每个字符之间。

与您的第一个代码等效的是将列表中的每个字符串元素转换为单独的字符串:

s.join(str(x) for x in list)

在您的特定情况下,str是空操作,因为如果输入已经是str,它将返回参数。

对于任意列表,此处显示的方法 比仅使用s.join(list)更好,因为join要求迭代器的所有元素均为str ,但不尝试像print那样转换它们。而是在遇到非TypeError时引发str

另一种表示相同转换的方式是较少的pythonic,但仍然很常见。

s.join(map(str, list))

当然,在这里,您可以在自己的常用内建函数之后插入针对命名变量的强制性警告。

答案 2 :(得分:1)

join函数是一个字符串方法,它返回与可迭代元素相关的字符串。

现在,在第一种情况下:

list_1 = ['first', 'second', 'third', 'fourth'] #I changed the name to list_1 as list is a keyword
s = '/'
newList = s.join(list_1)
print(newList)

列表中的每个字符串都是可迭代的,因此,通过在每个元素之间添加'/'来连接列表中的所有元素,从而连接输出。

在第二种情况下:

list_1 = ['first', 'second', 'third', 'fourth']
s = '/'
newList = s.join(str(list_1))
print(newList)

因为,str将包括[]大括号在内的整个列表转换为字符串。因此,新字符串中的每个字符都变为可迭代,并且join通过在每个元素之间添加'/'来返回新字符串。

相关问题