2013-10-24 35 views
0

我是python的新手。第一次開始使用它。到現在爲止,我一直在加快速度,並取得良好的進展。Stuck使用Python列表

我有一個列表變量(rawData)持有字符串。

rawData[0:2] 

['00:00:10.000000,  500.000000000,  5.00000000, 80.00,\n', 
'00:00:10.002667,  500.000000000,  5.00000000, 80.00,\n'] 

我努力做到以下幾點,與現有的數據:

rawData[0:2] 

[['00:00:10.000000', '500.0', '5.0', '80.00'], 
['00:00:10.002667', '500.0', '5.0', '80.00']] 

感謝您的時間。我很感激。

回答

1

假設你有這份名單

>>> L = ['00:00:10.000000,  500.000000000,  5.00000000, 80.00,\n', 
... '00:00:10.002667,  500.000000000,  5.00000000, 80.00,\n'] 

你可以每行分成列表這樣

>>> [item.split() for item in L] 
[['00:00:10.000000,', '500.000000000,', '5.00000000,', '80.00,'], ['00:00:10.002667,', '500.000000000,', '5.00000000,', '80.00,']] 

但你仍然需要進一步的處理,並自每個領域的處理都是不同的,但試圖在列表理解中做到這一點是尷尬和混亂的。相反,首先編寫一個輔助函數。讓我們把它稱爲「process_item

>>> def process_item(item): 
...  return item.split() 
... 
>>> [process_item(item) for item in L] 
[['00:00:10.000000,', '500.000000000,', '5.00000000,', '80.00,'], ['00:00:10.002667,', '500.000000000,', '5.00000000,', '80.00,']] 

現在你在一個更好的位置是添加一些代碼來process_item來處理你的個人領域

>>> def process_item(item): 
...  f1, f2, f3, f4 = item.split() 
...  f1 = f1.rstrip(',') 
...  f2 = f2.rstrip(',') # more code needed here 
...  f3 = f3.rstrip(',') # more code needed here 
...  f4 = f4.rstrip(',') 
...  return [f1, f2, f3, f4] 

讓我們來看看你會如何解決F2和F3

>>> f2 = '500.000000000' 
>>> f2[:f2.find('.')+2] 
'500.0' 

但你不想這樣做,如果有在F2

沒有
>>> f2 = '500' 
>>> f2[:f2.find('.')+2] 
'5' 

因此,您需要使用if進行測試。現在把它放在一起

>>> def process_item(item): 
...  f1, f2, f3, f4 = item.split() 
...  f1 = f1.rstrip(',') 
...  f2 = f2.rstrip(',') 
...  f3 = f3.rstrip(',') 
...  f4 = f4.rstrip(',') 
...  if '.' in f2: 
...   f2 = f2[:f2.find('.')+2] 
...  if '.' in f3: 
...   f3 = f3[:f3.find('.')+2] 
...  return [f1, f2, f3, f4] 
... 
>>> [process_item(item) for item in L] 
[['00:00:10.000000', '500.0', '5.0', '80.00'], 
['00:00:10.002667', '500.0', '5.0', '80.00']] 
+0

最全面的答案。也許標準化「整數」字符串格式的另一種選擇是將它們轉換爲浮點數並使用字符串格式說明符指定句點後的適當位數以將其轉換回適當的字符串。首先,這將取消對'。'的檢查。其次,如果'。'沒有找到,它會將它加入......如果這是OP的意圖。第三,你不必假設在這段時間後會有足夠的'0'。唯一的假設是最後3個字符串可以轉換爲浮點數。 – lightalchemist

0

splitbasestring的所有實例所擁有的方法,它將字符串轉換爲字符串列表,分割給定的字符。 rstrip將刪除最右側的字符(刪除尾隨逗號)。嘗試是這樣的:

[ x.strip().rstrip(',').split(',') for x in rawData ]