![](/img/trans.png)
[英]what's the difference between these 2 python codes? why different results?
[英]What's the difference between these codes? Why do they have different outputs?
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()
在這里做了什么,導致列表由每個字母分開?
str()
創建一個類似於"['first', 'second', 'third', 'fourth']"
的字符串。
s.join()
將字符串視為char數組。 然后將'/'
放在數組中的每個元素之間。
str
將其參數轉換為其字符串表示形式。 列表的字符串表示形式是一個單個字符串,其開頭為方括號,結尾為結尾。 中間的元素使用repr
轉換,並以,
分隔。 該字符串本身就是一個可迭代的字符。 這樣, join
將在可迭代的每個元素之間(即,字符串的每個字符之間)放置一個/
。
與您的第一個代碼等效的是將列表中的每個字符串元素轉換為單獨的字符串:
s.join(str(x) for x in list)
在您的特定情況下, str
是no-op,因為如果輸入已經是str
,它將返回參數。
對於任意的列表,這里顯示的方法是比只用更好s.join(list)
,因為join
需要迭代的所有元素是str
S,但並沒有試圖將它們轉換,如說print
會。 而是在遇到非str
時引發TypeError
。
表示相同轉換的另一種方法,較少使用pythonic,但仍然非常常見,
s.join(map(str, list))
當然,在您自己的常用內建函數之后,插入針對命名變量的強制性警告。
join
函數是一個字符串方法,它返回一個與iterable元素相聯系的字符串。
現在,在第一種情況下:
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通過在每個元素之間添加'/'
來返回新字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.