2015-04-27 81 views
3

在下面的循環中,content是包含未知數量字符串的列表。每個字符串都包含一個名稱,並在名稱後面包含一組數字,每個數字都由空格分隔。我正在嘗試使用split將名稱和每個分數放入一個變量中,但由於每個名稱的分數可變,我遇到了麻煩。如果不知道每個名字會有多少分數,我該如何做到這一點?python中的字符串分割

for i in content: 
    name, score1, score2 = i.split() 
    print name, score1, score2 

回答

7

您可以使用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() 
2

您可以使用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 
0
for i in content: 
    print i.split(" ")[0],i.split(" ")[1],i.split(" ")[2] 

分割返回一個列表,所以你必須索引來獲取值。

1

我喜歡@ 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 []