您好,登錄后才能下訂單哦!
小編給大家分享一下Python字符串如何實現拆分與連接,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
在 Python 中,字符串表示為str對象,它們是不可變的:這意味著不能直接更改內存中表示的對象。這兩個事實可以幫助您學習(然后記住)如何使用.split().
您是否已經猜到字符串的這兩個特性與 Python 中的拆分功能有何關系?如果您猜測這.split()是一個實例方法,因為字符串是一種特殊類型,那么您是對的!在其他一些語言(如 Perl)中,原始字符串用作獨立.split()函數的輸入,而不是對字符串本身調用的方法。
注意:調用字符串方法的方法
像這樣的字符串方法.split()在這里主要顯示為在字符串上調用的實例方法。它們也可以被稱為靜態方法,但這并不理想,因為它更“冗長”。為了完整起見,這里有一個例子:
# Avoid this: str.split('a,b,c', ',')
當您將其與首選用法進行比較時,這既笨重又笨拙:
# Do this instead: 'a,b,c'.split(',')
有關 Python 中的實例、類和靜態方法的更多信息,請查看我們的深入教程。
字符串不變性怎么樣?這應該提醒您字符串方法不是就地操作,但它們會在內存中返回一個新對象。
注意:就地操作
就地操作是直接更改調用它們的對象的操作。一個常見的例子是在列表上使用的.append()方法:當你調用一個列表時,通過將輸入添加到同一個列表來直接更改該列表。.append().append()
在深入之前,讓我們看一個簡單的例子:
>>> >>> 'this is my string'.split() ['this', 'is', 'my', 'string']
這實際上是.split()調用的一個特例,我選擇它是為了它的簡單性。沒有指定任何分隔符,.split()將任何空格都算作分隔符。
裸調用的另一個特點.split()是它會自動刪除前導和尾隨空格,以及連續的空格。比較.split()在沒有分隔符參數的情況下調用以下字符串和有' '作為分隔符參數的調用:
>>> >>> s = ' this is my string ' >>> s.split() ['this', 'is', 'my', 'string'] >>> s.split(' ') ['', 'this', '', '', 'is', '', 'my', 'string', '']
首先要注意的是,這展示了 Python 中字符串的不變性:后續調用.split()處理原始字符串,而不是第一次調用.split().
您應該看到的第二件事也是主要的事情是,bare .split()call 提取句子中的單詞并丟棄任何空格。
.split(' '),另一方面,更字面意思。當有前導或尾隨分隔符時,您將得到一個空字符串,您可以在結果列表的第一個和最后一個元素中看到該字符串。
如果有多個連續的分隔符(例如“this”和“is”之間以及“is”和“my”之間),第一個將用作分隔符,隨后的分隔符將進入您的結果列表作為空字符串。
注意:調用中的分隔符 .split()
雖然上面的示例使用單個空格字符作為 的分隔符輸入.split(),但用作分隔符的字符類型或字符串長度不受限制。唯一的要求是你的分隔符是一個字符串。你可以使用從"..."到 even 的任何東西"separator"。
.split()有另一個可選參數稱為maxsplit. 默認情況下,.split()將在調用時進行所有可能的拆分。maxsplit但是,當您為 賦值時,只會進行給定數量的拆分。使用我們之前的示例字符串,我們可以看到maxsplit:
>>> >>> s = "this is my string" >>> s.split(maxsplit=1) ['this', 'is my string']
如上所示,如果設置maxsplit為1,則第一個空白區域將用作分隔符,其余的將被忽略。讓我們做一些練習來測試到目前為止我們學到的一切。
練習:“自己嘗試:Maxsplit”顯示隱藏
當你給一個負數作為maxsplit參數時會發生什么?
解決方案:“自己嘗試:Maxsplit”顯示隱藏
.split()將在所有可用的分隔符上拆分您的字符串,這也是maxsplit未設置時的默認行為。
練習:“部分理解檢查”顯示隱藏
您最近收到了一個格式非常糟糕的逗號分隔值 (CSV) 文件。您的工作是將每一行提取到一個列表中,該列表的每個元素代表該文件的列。是什么讓它格式錯誤?“地址”字段包含多個逗號,但需要在列表中表示為單個元素!
假設您的文件已作為以下多行字符串加載到內存中:
Name,Phone,Address Mike Smith,15554218841,123 Nice St, Roy, NM, USA Anita Hernandez,15557789941,425 Sunny St, New York, NY, USA Guido van Rossum,315558730,Science Park 123, 1098 XG Amsterdam, NL
您的輸出應該是一個列表列表:
[ ['Mike Smith', '15554218841', '123 Nice St, Roy, NM, USA'], ['Anita Hernandez', '15557789941', '425 Sunny St, New York, NY, USA'], ['Guido van Rossum', '315558730', 'Science Park 123, 1098 XG Amsterdam, NL'] ]
每個內部列表代表我們感興趣的 CSV 行,而外部列表將它們保存在一起。
解決方案:“部分理解檢查”顯示隱藏
這是我的解決方案。有幾種方法可以攻擊它。重要的是您使用.split()了它的所有可選參數并獲得了預期的輸出:
input_string = """Name,Phone,Address Mike Smith,15554218841,123 Nice St, Roy, NM, USA Anita Hernandez,15557789941,425 Sunny St, New York, NY, USA Guido van Rossum,315558730,Science Park 123, 1098 XG Amsterdam, NL""" def string_split_ex(unsplit): results = [] # Bonus points for using splitlines() here instead, # which will be more readable for line in unsplit.split('\n')[1:]: results.append(line.split(',', maxsplit=2)) return results print(string_split_ex(input_string))
我們.split()在這里打了兩次電話。第一次使用可能看起來很嚇人,但別擔心!我們將逐步完成它,您會對這些表達式感到滿意。讓我們再看看第一個.split()調用:unsplit.split('\n')[1:].
第一個元素是unsplit,它只是指向輸入字符串的變量。然后我們有我們的.split()電話:.split('\n')。在這里,我們正在拆分一個稱為換行符的特殊字符。
有什么作用\n?顧名思義,它告訴正在讀取字符串的任何人,它后面的每個字符都應該顯示在下一行。在像我們這樣的多行字符串中,每行末尾input_string都有一個隱藏\n。
最后一部分可能是新的:[1:]. 到目前為止的語句給了我們一個內存中的新列表,[1:]看起來像一個列表索引符號,它是——有點!這個擴展的索引符號給了我們一個列表 slice。在這種情況下,我們取 index 處的元素1及其后的所有元素,丟棄 index 處的元素0。
總之,我們遍歷一個字符串列表,其中每個元素代表多行輸入字符串中除了第一行之外的每一行。
在每個字符串中,我們.split()再次調用using,作為拆分字符,但這次我們只使用maxsplit前兩個逗號進行拆分,而地址保持不變。然后我們將該調用的結果附加到恰當命名的results數組并將其返回給調用者。
另一個基本的字符串操作與拆分字符串相反:字符串連接。如果你沒見過這個詞,別擔心。這只是說“粘合在一起”的一種奇特方式。
有幾種方法可以做到這一點,具體取決于您要實現的目標。最簡單和最常用的方法是使用加號 ( +) 將多個字符串相加。只需將 a 放在+您想要連接在一起的任意數量的字符串之間:
>>> >>> 'a' + 'b' + 'c' 'abc'
為了與數學主題保持一致,您還可以將字符串相乘以重復它:
>>> >>> 'do' * 2 'dodo'
請記住,字符串是不可變的!如果連接或重復存儲在變量中的字符串,則必須將新字符串分配給另一個變量以保留它。
>>> >>> orig_string = 'Hello' >>> orig_string + ', world' 'Hello, world' >>> orig_string 'Hello' >>> full_sentence = orig_string + ', world' >>> full_sentence 'Hello, world'
如果我們沒有不可變的字符串,full_sentence則會輸出'Hello, world, world'.
另一個注意事項是 Python 不進行隱式字符串轉換。如果您嘗試將字符串與非字符串類型連接起來,Python將引發一個TypeError:
>>> >>> 'Hello' + 2 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: must be str, not int
這是因為您只能將字符串與其他字符串連接起來,如果您來自像 JavaScript 這樣試圖進行隱式類型轉換的語言,這對您來說可能是一種新行為。
還有另一種更強大的方法可以將字符串連接在一起。您可以使用該join()方法從 Python 中的列表轉換為字符串。
這里的常見用例是當您有一個由字符串組成的可迭代對象(如列表),并且您希望將這些字符串組合成一個字符串時。就像.split(),.join()是一個字符串實例方法。如果您所有的字符串都在一個可迭代對象中,您會調用哪一個.join()?
這是一個有點棘手的問題。請記住,當您使用 時.split(),您將在要拆分的字符串或字符上調用它。相反的操作是.join(),因此您可以在要用于將可迭代字符串連接在一起的字符串或字符上調用它:
>>> >>> strings = ['do', 're', 'mi'] >>> ','.join(strings) 'do,re,mi'
在這里,我們strings用逗號 ( ,)連接列表的每個元素,并調用.join()它而不是strings列表。
練習:“通過加入提高可讀性”顯示隱藏
如何使輸出文本更具可讀性?
解決方案:“通過加入提高可讀性”顯示隱藏
您可以做的一件事是添加間距:
>>> >>> strings = ['do', 're', 'mi'] >>> ', '.join(strings) 'do, re, mi'
通過在我們的連接字符串中添加一個空格,我們大大提高了輸出的可讀性。在加入字符串以提高可讀性時,您應該始終牢記這一點。
.join()很聰明,因為它將您的“joiner”插入到您想要加入的可迭代的字符串之間,而不是僅僅在可迭代的每個字符串的末尾添加您的joiner。這意味著,如果您傳遞 size 的迭代1,您將看不到您的加入者:
>>> >>> 'b'.join(['a']) 'a'
練習:“部分理解檢查”顯示隱藏
使用我們的網頁抓取教程,您已經構建了一個很棒的天氣抓取工具。但是,它會在列表列表中加載字符串信息,每個列表都包含要寫出到 CSV 文件的唯一信息行:
[ ['Boston', 'MA', '76F', '65% Precip', '0.15 in'], ['San Francisco', 'CA', '62F', '20% Precip', '0.00 in'], ['Washington', 'DC', '82F', '80% Precip', '0.19 in'], ['Miami', 'FL', '79F', '50% Precip', '0.70 in'] ]
您的輸出應該是如下所示的單個字符串:
""" Boston,MA,76F,65% Precip,0.15in San Francisco,CA,62F,20% Precip,0.00 in Washington,DC,82F,80% Precip,0.19 in Miami,FL,79F,50% Precip,0.70 in """
解決方案:“部分理解檢查”顯示隱藏
對于此解決方案,我使用了列表推導式,這是 Python 的一項強大功能,可讓您快速構建列表。如果您想了解更多關于它們的信息,請查看這篇涵蓋 Python 中所有可用推導式的精彩文章。
以下是我的解決方案,以列表列表開始并以單個字符串結尾:
input_list = [ ['Boston', 'MA', '76F', '65% Precip', '0.15 in'], ['San Francisco', 'CA', '62F', '20% Precip', '0.00 in'], ['Washington', 'DC', '82F', '80% Precip', '0.19 in'], ['Miami', 'FL', '79F', '50% Precip', '0.70 in'] ] # We start with joining each inner list into a single string joined = [','.join(row) for row in input_list] # Now we transform the list of strings into a single string output = '\n'.join(joined) print(output)
這里我們.join()不是用一次,而是用了兩次。首先,我們在列表推導中使用它,它將每個內部列表中的所有字符串組合成一個字符串。接下來,我們將每個字符串與\n我們之前看到的換行符連接起來。最后,我們簡單地打印結果,以便我們可以驗證它是否符合我們的預期。
看完了這篇文章,相信你對“Python字符串如何實現拆分與連接”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。