2017-05-08 48 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 +”是指“一个或多个空格字符” 这并没有解决转换的问题,您(可选)数字转换为数字格式,但这似乎是另一个问题