在下面的循環中,content
是包含未知數量字符串的列表。每個字符串都包含一個名稱,並在名稱後面包含一組數字,每個數字都由空格分隔。我正在嘗試使用split
將名稱和每個分數放入一個變量中,但由於每個名稱的分數可變,我遇到了麻煩。如果不知道每個名字會有多少分數,我該如何做到這一點?python中的字符串分割
for i in content:
name, score1, score2 = i.split()
print name, score1, score2
在下面的循環中,content
是包含未知數量字符串的列表。每個字符串都包含一個名稱,並在名稱後面包含一組數字,每個數字都由空格分隔。我正在嘗試使用split
將名稱和每個分數放入一個變量中,但由於每個名稱的分數可變,我遇到了麻煩。如果不知道每個名字會有多少分數,我該如何做到這一點?python中的字符串分割
for i in content:
name, score1, score2 = i.split()
print name, score1, score2
您可以使用slicing for assignment:
for i in content:
s=i.split()
name,scores=s[0],s[1:]
在最後,你會在有名稱name
變量和得分scores
的列表。
在Python 3中,你可以使用star expressions
:
for i in content:
name,*scores=i.split()
您可以使用Extended Iterable Unpacking
content = ['this 3 5 2', 'that 3 5']
for i in content:
name, *score = i.split()
print(name, score)
這僅僅是Python的3.x的兼容。
對於Python 2.x中,
content = ['this 3 5 2', 'that 3 5']
for i in content:
splitted_content = i.split()
name, dynamic_score = splitted_content[0], splitted_content[1:]
print name, dynamic_score
在Python 2.x的這種切片算法
first, rest = seq[0], seq[1:]
被清潔器,可能更有效的替代:
first, *rest = seq
for i in content:
print i.split(" ")[0],i.split(" ")[1],i.split(" ")[2]
分割返回一個列表,所以你必須索引來獲取值。
我喜歡@ kasra的回答上面,因爲它的工作原理爲Python 2.x和3.x(沒有足夠的點尚未對Kasra的信息發表評論)
在一些示例代碼只是增加說明了別人誰可能想知道:
#!/usr/bin/env python
# coding: utf-8
fi = open('bowling_scores.txt','r')
for line in fi:
if len(line) > 1: #skip blank rows
rec=line.split(' ') #subst any delimiter, or just use split() for space
bowler,scores=rec[0],rec[1:]
print bowler, scores
fi.close()
有一個輸入文件bowling_scores.txt
這樣的:
John 210 199 287 300 291
Paul 188 165 200
George 177 201
Ringo 255 189 201 300
Yoko 44
Brian
會給你的輸出是這樣的:
John ['210', '199', '287', '300', '291']
Paul ['188', '165', '200']
George ['177', '201']
Ringo ['255', '189', '201', '300']
Yoko ['44']
Brian []