2017-05-08 51 views
2

這裏是我的程序:Python的空白移除在列表

import sys 
d = sys.stdin.readlines() 
print(*d) 
d = [x.strip(' ') for x in d] 
print(*d) 

這裏是發生了什麼,當我運行它:

>>> import program12 
Austin Houston 400 
SanFrancisco   Fresno  700 
Miami   Ames 500 
# EOF 
Austin Houston 400 
SanFrancisco   Fresno  700 
Miami   Ames 500 

Austin Houston 400 
SanFrancisco   Fresno  700 
Miami   Ames 500 

我的程序需要每行接受,2串分離由空格,隨後(可選)按數字。 我想不帶空格分隔這些所以這將是:

['Austin', 'Houston', 400] 

然後我希望把這些在「曲線」,所以我將使用類似:

flights = collections.defaultdict(dict) 

任何幫助感謝!編輯: 第一個答案是固定的!在談到我剛纔的問題,我加入這個代碼,這會產生一個錯誤: 現在我有這樣的:

import sys 
d = sys.stdin.readlines() 
print(*d) 
d = [x.split() for x in d] 
print(*d) 
flights = {} 
for each in d: 
    flights[each.split()[0]][each.split()[1]] = each.split()[2] 

當我運行:

>>> import program12 
Austin Houston 400 
SanFrancisco   Fresno  700 
Miami   Ames 500 
Austin Houston 400 
SanFrancisco   Fresno  700 
Miami   Ames 500 

['Austin', 'Houston', '400'] ['SanFrancisco', 'Fresno', '700'] ['Miami', 'Ames', '500'] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/home/program12.py", line 8, in <module> 
    flights[each.split()[0]][each.split()[1]] = each.split()[2] 
AttributeError: 'list' object has no attribute 'split' 

編輯2: 我的程序:

import sys 
import collections 
d = sys.stdin.readlines() 
d = filter(None,d.split('\n')) 
flights = {each.split()[0]:{each.split()[1]:''} for each in d} 
for each in d: 
    sp = each.split();flights[sp[0]][sp[1]] = '' if len(sp) <= 2 else sp[2] 

新的錯誤:

>>> import program12 
Austin Houston 400 
SanFrancisco   Fresno  700 
Miami   Ames 500 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/home/program12.py", line 4, in <module> 
    d = filter(None,d.split('\n')) 
AttributeError: 'list' object has no attribute 'split' 

回答

3

這也與您之前的問題相關。 str.split(」「)是從str.split()

>>> d1 = [i.split(' ') for i in filter(None,d.split('\n'))] 
>>> d1 
[['Houston', 'Washington', '', '', '', '', '', '', '', '1000'], ['Vancouver', 'Houston', '300'], ['Dallas', 'Sacramento', '', '', '', '', '', '', '', '', '', '800'], ['Miami', '', '', '', '', '', '', '', '', '', '', 'Ames', '2000'], ['SanFrancisco', 'LosAngeles'], ['ORD', 'PVD', '1000']] 

>>> d2 = [i.split() for i in filter(None,d.split('\n'))] 
>>> d2 
[['Houston', 'Washington', '1000'], ['Vancouver', 'Houston', '300'], ['Dallas', 'Sacramento', '800'], ['Miami', 'Ames', '2000'], ['SanFrancisco', 'LosAngeles'], ['ORD', 'PVD', '1000']] 

基本上,你需要訪問它之前,形成你的字典不同的!

>>> d 
'\nHouston Washington  1000\nVancouver Houston 300\nDallas Sacramento   800\nMiami   Ames 2000\nSanFrancisco LosAngeles\nORD PVD 1000\n' 
>>> d1=filter(None,d.split('\n')) 
>>> flights = {each.split()[0]:{each.split()[1]:''} for each in d1} 
>>> 
>>> flights 
{'Houston': {'Washington': ''}, 'SanFrancisco': {'LosAngeles': ''}, 'Dallas': {'Sacramento': ''}, 'Miami': {'Ames': ''}, 'Vancouver': {'Houston': ''}, 'ORD': {'PVD': ''}} 
>>> for each in d1:sp = each.split();flights[sp[0]][sp[1]] = '' if len(sp) <= 2 else sp[2] 
... 
>>> flights 
{'Houston': {'Washington': '1000'}, 'SanFrancisco': {'LosAngeles': ''}, 'Dallas': {'Sacramento': '800'}, 'Miami': {'Ames': '2000'}, 'Vancouver': {'Houston': '300'}, 'ORD': {'PVD': '1000'}} 
+0

謝謝!關於我之前的問題,現在您幫助我的代碼的第二部分不起作用。如果您可以請看看,我已經編輯了這個問題! :) – Coder117

+0

你能分享這個樣本輸入嗎? –

+0

我做到了。我在這個問題的最後列入了它。 – Coder117

1

試試這個

import sys 
d = sys.stdin.readlines() 
d = [i.strip() for x in d for i in x.split()] 
print(*d) 

,如果你想通過線

import sys 
for d in sys.stdin.readlines(): 
    d = [i.strip() for i in d.split()] 
    print(*d) 
1

使用replace()行:

import sys 
d = sys.stdin.readlines() 
print(*d) 
d = [x.replace(' ','') for x in d] 
print(*d) 

如果碰巧是標籤,而不僅僅是空間:

import sys 
d = sys.stdin.readlines() 
print(*d) 
d = [x.replace(' ','').replace('\t', '') for x in d] 
print(*d) 

這符合確切的結果您嘗試使用strip('\n')獲得

1

對於d的每一行,帶換行字符,然後使用split()

d = [x.strip().split() for x in d]

關於第二個問題, for each in d:這裏d拆分它列表等清單等each是一個列表,你不能使用它split()因爲它已經拆分。您可以直接使用each[0]

1

另外,您可以使用正則表達式分割線:

import sys 
import re 
raw_lines = sys.stdin.readlines() 
data = [re.split("\s+", line) for line in d] 

「\ S +」是指「一個或多個空格字符」 這並沒有解決轉換的問題,您(可選)數字轉換爲數字格式,但這似乎是另一個問題