假設我有以下字串串列:
animals = [
'rhino, grey, 30 July 2022',
'giraffe, 30 March 2022',
'bird',
'llama, brown, 8 April 2022',
'tiger'
]
其中串列的第一項 (animal[0]) 是字串 rhino,grey,30 July 2022,第二項 (animal[1]) 是giraffe, 30 March 2022,第三項是bird等等。每個字串中專案的順序始終是動物名稱、顏色、出生日期,但在某些情況下,顏色或日期可能會丟失。
我想撰寫的代碼需要執行以下操作:對于串列中的每個字串,基于逗號拆分,并將結果添加到新串列中:
我有:
name = []
color = []
birthday= []
for animal in animals:
name.append((animal.split(","))[0])
color.append((animal.split(","))[1])
birthday.append((animal.split(","))[2])
但是,這不起作用,因為在某些情況下,顏色或生日可能會丟失,所以我遇到了 IndexError(串列索引超出范圍)。誰能想到解決這個問題的方法?例如,通過計算字串被拆分的次數?
uj5u.com熱心網友回復:
您可以在缺少的專案中添加空白尺寸。然后您可以將資料拆分為串列名稱、顏色、生日。
使用此串列時,只需洗掉空白項(或您使用的空標記)。
uj5u.com熱心網友回復:
如果您的元素丟失birthday或color
animals = [
'rhino, grey, 30 July 2022',
'giraffe, 30 March 2022',
'bird',
'llama, brown, 8 April 2022',
'tiger'
]
name = []
color = []
birthday= []
for animal in animals:
item_split = animal.split(", ")
name.append(item_split[0])
if len(item_split) == 3:
color.append(item_split[1])
birthday.append(item_split[2])
elif len(item_split) == 2:
# Checking year
year = item_split[1].split(' ')[-1].strip()
if year.isnumeric():
birthday.append(item_split[1])
color.append(' ')
elif:
color.append(item_split[1])
birthday.append(' ')
elif len(item_split) == 1:
color.append(' ')
birthday.append(' ')
uj5u.com熱心網友回復:
當某些資料丟失時使用串列時,您可能會遇到麻煩(例如,您不知道哪種顏色與哪一行搭配)。
但是,關于你的問題:
name = []
color = []
birthday= []
for animal in animals:
split_animal = animal.split(",")
if len(split_animal) == 3:
name.append(split_animal[0])
color.append(split_animal[1])
birthday.append(split_animal[2])
elif len(split_animal) == 2:
name.append(split_animal[0])
color.append(split_animal[1])
elif len(split_animal) == 1:
name.append(split_animal[0])
else:
pass
這是對您的問題的一個非常具體的答案,它假設您的資料結構。它也不是很有效。您必須指定資料的其他方面以及您的意圖以獲得更徹底的解決方案。
uj5u.com熱心網友回復:
您必須考慮的一個問題是缺少中間“顏色”部分,在這種情況下,您必須將索引 1(如果存在)處的值轉移到下一個索引(生日)。一種方法是檢查該值是否包含任何數字(不確定它的可靠性):
def split_props(animal):
parts = animal.split(',')
if len(parts) > 1 and re.search('[0-9] ', parts[1]):
parts.insert(1, None)
return parts
animal_props = [split_props(animal) for animal in animals]
name, color, birthday = [[a[i] if i < len(a) else None for a in animal_props] for i in [0,1,2]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/525699.html
標籤:Python列表分裂
上一篇:從串列中的字典回傳鍵值的函式
下一篇:提取一列
