2013-12-08 170 views
0
l = open(filename) 
string = l.read() 
subsetA, subsetB = string[:len(string)//2], string[len(string)//2:] 
print(subsetA) 
print(subsetB) 

它使打印此:爲什麼第一部分打印4而不是3數字?

9 17 4 8 
11 18 13 

我期待着得到:

9 17 4 
8 11 18 13 

文本文件:

9 17 4 8 11 18 13 

任何幫助嗎?謝謝!我還是不明白,爲什麼我做錯了這一部分:

subsetA, subsetB = string[:len(string)//2], string[len(string)//2:] 
+0

爲什麼做* *您希望只看到'9 17 4'的字符串的前半部分? –

回答

1

您在兩個分裂長度18的字符串:

>>> text = '9 17 4 8 11 18 13\n' 
>>> len(text) // 2 
9 
>>> text[:9] 
'9 17 4 8 ' 
>>> text[9:] 
'11 18 13\n' 

這樣的劃分使得非常有意義

即使沒有在最後的換行符,使其長度17,仍然會工作:

>>> text = '9 17 4 8 11 18 13' 
>>> len(text) 
17 
>>> len(text) // 2 
8 
>>> text[:8] 
'9 17 4 8' 
>>> text[8:] 
' 11 18 13' 

您沒有將基於組數字,這裏的數一半的字符串,要拆分純粹關於字符串的字符數。

如果你想做到這一點,首先拆分行:

>>> parts = text.split() 
>>> parts 
['9', '17', '4', '8', '11', '18', '13'] 
>>> parts[:len(parts)//2] 
['9', '17', '4'] 
>>> parts[len(parts)//2:] 
['8', '11', '18', '13'] 
+0

如果我那樣做。 subsetA = len(string [:8])然後我會得到只是普通的8. – user2985771

+0

這是因爲這是**長度**的切片字符串,這是驚喜,8個字符長。 –

+0

謝謝你的第三個解決方案。 – user2985771

相關問題