簡體   English   中英

java程序員學習python:字符串拆分和連接

[英]java programmer learning python: string split and join

有人可以向我解釋為什么在python中我們想要加入我們寫的字符串:

'delim'.join(list)

當我們要分割一個字符串時,我們寫:

str.split('delim')

來自java似乎其中一個是倒退的,因為在java中我們寫道:

//split:
str.split('delim');
//join
list.join('delim');

編輯:
你是對的。 加入列表。 (雖然它沒有改變問題)

有人可以向我解釋這個API背后的基本原理嗎?

加入只有在加入某種迭代時才有意義。 但是,由於iterables不一定包含所有字符串,因此將join作為方法放在iterable上是沒有意義的。 (你會期望[1,"baz",my_custom_object,my_list].join("foo")的結果是什么?)唯一的其他地方是作為一個字符串方法,理解可迭代中的所有內容將是一個字符串。 此外,將join作為字符串方法放置允許它與任何可迭代 - 元組,列表,生成器,支持迭代的自定義對象甚至字符串一起使用。

另請注意,您可以完全自由地以與加入字符串相同的方式拆分字符串:

list_of_strings='this, is , a, string, separated, by , commas.'.split(',')

當然,這里的實用程序並不那么容易看到。

http://docs.python.org/faq/design.html#why-is-join-a-string-method-instead-of-a-list-or-tuple-method

從來源:

join()是一個字符串方法,因為在使用它時,您告訴分隔符字符串迭代一系列字符串並將其自身插入相鄰元素之間。 此方法可以與遵循序列對象規則的任何參數一起使用,包括您可能自己定義的任何新類。

因為這是一個字符串方法,所以它可以用於Unicode字符串以及純ASCII字符串。 如果join()是序列類型的方法,則序列類型必須根據分隔符的類型決定返回哪種類型的字符串。

這樣您就不必為您創建的每個序列類型重新實現連接操作。 Python使用協議而不是類型作為其主要行為模式,因此即使它們不是從現有的序列類派生,也可以期望每個序列的行為相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM