2016-07-07 6 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つの呼び出し

Iを言ってレポートを生成する必要がターゲット表にロードする前に、これを含むリストを作成する必要があります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 = ['Ambulance'、3、 'Fire Crew'、2、 'Police'、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を使用して整数をグループ化し、文字列から分離することができます。 「トリック」はgroupbyキー機能としてtypeを使用することです。

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

これは1つでなければなりません。 ;) –

関連する問題