Python split 字串分割教學與範例, array_split, list分割(字串處理)

應用篇

這邊是要介紹如果在處理list的data的時候,想要每N個元素做一次處理的話該怎麼做,以及如何使用pythonk的split() method。

split的用法

如果是想要單純分割文字串(str)的話可以使用split()

但是要注意的是,在使用split時默認狀態是會將空白鍵, 改行 \n, tab \t忽略,將他們全部一併處理。

另外,他的return值會是一個list。

blank = '1 2 3 4 5\n6\t7'
print(blank)
#1 2 3 4 5
#6	7

print(blank.split())
#['1', '2', '3', '4', '5', '6', '7']

print(type(blank.split()))
#<class 'list'>

將list中的要素每N個分割一次

例如,想要把有10個元素的list的內部細分成每3個一組的時候該怎麼做呢?

最簡單的方法就是,利用for來將第0到第2個元素分成一組,接著再透過yield重新生成一個matrix。

範例:

def split_list(l, n):
  # 將list分割 (l:list, n:每個matrix裡面有n個元素)
  for idx in range(0, len(l), n):
    yield l[idx:idx+n]

l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = list(split_list(l, 3)) #將list分割成每份中有3個元素
print(result) #[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]

將list分成N份

如果單純是想把list分成N份的話,用numpy的array_split應該是最方便的方式。

例如,跟剛剛一樣如果要將有10個元素的list分成3份的話,可以用下面的寫法。

import numpy as np
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = list(np.array_split(l, 3)) 
print(result) #[array([1, 2, 3, 4]), array([5, 6, 7]), array([ 8,  9, 10])]

但是,這邊要注意的是如果是單純的文字串的話沒有辦法用array_split來分割。

另外,如果沒有安裝numpy的話可以使用下面的方法。

import math

text = 'abcdefghij'
result = []
n = math.ceil(len(text) / 3) #使用ceil時,小數點會無條件進位
for idx in range(0, len(text), n):
  result.append(text[idx : idx + n])
print(result) #['abcd', 'efgh', 'ij']

上面的code使用到了math.ceil,小數點會無條件進位,如果想要使用小數點無條件捨去的話可以使用floor。

另外,上面的code也可以將for寫成一行,但是可能就會變得不是那麼好理解,如果有興趣的人可以參考下面看看。

import math

text = 'abcdefghij'

n = math.ceil(len(text) / 3) #使用ceil時,小數點會無條件進位
result = [text[idx : idx + n] for idx in range(0, len(text), n)]
print(result) #['abcd', 'efgh', 'ij']

我們可以看到兩個code所輸出的結果是一樣的,但如果要重複使用的話可能還是把它寫成函數會比較好理解~

留言