2016-07-07 225 views
-1

我有表varchar列的值,我試圖在Python中創建&訪問列表元素進行數據清理。我有列表(柱樣本值)像這樣:如何訪問列表中的不同數據類型元素?

Caller_ID = ['Ambulance',1,2,3,'Fire Crew',1,2] 

即救護車後跟「1,2,3」是指救護車用「1 2」指消防船員被接觸接觸3次,並 消防船員隨後2次。 所以最後我需要製作包含這樣的列表,加載到目標表

Caller_ID = ['Ambulance','Ambulance','Ambulance','Fire Crew','Fire Crew'] 

我需要製作報告說要救護車部3個電話,2個呼叫消防務部門等

我之前有使用JavaScript的靜態實現。

var n = Caller_ID; 
var len = n.length; 
for (i = 0; i < len; i++) { 
    if (n.indexOf('Ambulance') > -1) { 
    var nn = n[i + 1] = 'Ambulance'; 
    } else if (n.indexOf('Fire Crew') > -1) { 
    nn = n[i + 1] = 'Fire Crew';` 
    } 
} 

輸出:

Caller_ID = ['Ambulance','Ambulance','Ambulance','Ambulance','Fire Crew','Fire Crew','Fire Crew','Police','Police'] 

我正在尋找使用Python的動態實現。

此輸入:

Caller_ID = ['Ambulance',1,2,3,'Fire Crew',1,2,'Policia',1] 

我需要這樣的輸出:

Caller_ID = ['Ambulance','Ambulance','Ambulance','Fire Crew','Fire Crew','Policia'] 
+2

爲什麼不將數據類型轉換爲字典,該值將是計數器,密鑰將是服務/項目? –

+3

你從哪裏得到這份清單?對於這個問題,這是一個不切實際的數據結構。只要有'Caller_ID =''救護車',3,'消防員',2,'警察',1]'將使它容易得多。 – MisterMiyagi

+1

你有沒有在Python中嘗試過任何東西? – Zafi

回答

0

你可以選擇這兩個字符串和計數,當您去通過列表:

Caller_ID = ['Ambulance',1,2,3,'Fire Crew',1,2,'Police',1] 
Callers = [] # list to hold result 
current_caller, caller_count = "", 0 # temporary variables holding current element 
# iterate through the list, pick each name and count 
for elem in Caller_ID: 
    # new name found 
    if isinstance(elem, str): # in python2.X, use basestring 
     Callers.extend([elem] * caller_count) # store last name with appropriate count 
     current_caller, caller_count = elem, 0 # reset state 
    else: 
     caller_count += 1 
Callers.extend([current_caller] * caller_count) 

Callers包含您正在尋找的物品。請注意,這假定名稱不重複,或者在這種情況下,相對位置和數量是必需的。

2

使用itertools.groupby可以很容易地將整數組合在一起並將它們與字符串分開。 「訣竅」是使用type作爲groupby的關鍵功能。

from itertools import groupby 

Caller_ID = ['Ambulance', 1, 2, 3, 'Fire Crew', 1, 2, 'Police', 1] 

newlist = [] 
for k, g in groupby(Caller_ID, key=type): 
    g = list(g) 
    if k is str: 
     s = g 
    else: 
     newlist.extend(s * len(g)) 

print(newlist) 

輸出

['Ambulance', 'Ambulance', 'Ambulance', 'Fire Crew', 'Fire Crew', 'Police'] 
2

這是我的解決方案,沒有進口需要,只是一個簡單明瞭閱讀for循環。

Caller_ID = ['Ambulance',1,2,3,'Fire Crew',1,2] 

new_list = [] 
for item in Caller_ID: 
    if type(item) == str: 
     current = item 
    else: 
     new_list.append(current) 

>>> new_list 
['Ambulance', 'Ambulance', 'Ambulance', 'Fire Crew', 'Fire Crew'] 
+0

對我很好。:) –

+0

這是簡單直觀的感謝@ PM2Ring :) – MAX

+0

應該有一個 - 最好只有一個 - 明顯的方法來做到這一點。 ;) –