2016-11-22 13 views
0

私はPythonで日付を扱っています。他のリストの重複した項目を使って項目内のリストを削除する

d = [] 
t = [] 
for row in cursor: 
    emp = row[2] #employee ID 
    logtype = row[4] # 'I' For login, 'O' for logout. 
    log = row[3] # time 

    day = log.strftime("%d") 
    month = log.strftime("%m") 
    year = log.strftime("%y") 
    times = log.strftime("%I:%M") 

    if (logtype == 'I') : 
     d.append(day) 
     t.append(times) 


#the problem 
time = list(set(t)) #len(22) 
day = list(set(d)) #len(23) 

RESULT

Day = ['03', '04', '05', '06', '07', '09', '10', '11', '11', '12', '13', '14', '17', '18', '19', '20', '21', '23', '24', '25', '26', '27', '28'] 

Time = ['08:05', '08:01', '08:08', '10:33', '08:05', '06:53', '08:15', '08:03', '08:06', '08:11', '08:05', '08:03', '09:23', '08:10', '08:05', '08:10', '08:26', '01:43', '08:01', '08:10', '01:14', '08:06', '08:06'] 

私は時間に同時にその値で繰り返しの日(11)を削除したいです。

UPDATE

from collections import Counter   
#identify repeating day in dex number duplicate 
dup = [i for key in (key for key, count in Counter(day).items() if count > 1) for i, x in enumerate(day) if x == key] 

私は、私はその後

for x in dup[:-1]: 
    time.pop(x) 
    day.pop(x) 
    day2.append(adlaw) 
    time2.append(time) 
下のコードが付加重複の最後に出現以外の条件を除く上記のコードを使用して、重複のインデックスを見つけることができ
+1

あなたの質問を編集し、試したコードを追加してください。それは動作しますか? –

+2

私は混乱しています* "Timeの重複値を使ってリストアイテムを削除する方法" *しかし、あなたの 'Day'はすでに一意の値を持っています。あなたが望むリストの構造とそれを達成しようとしたことについても言及してください –

+3

例えば、 'Day'に2つの' 11'があるので '08:06'を削除したいですか? – Keiwan

答えて

1

zip両方のグループを1日ごとに一覧表示し、グループ内の日付の最初の出現を取って、次のもの(重複)を削除します。つまり、最初の項目を保持したい場合です。

itertools.groupbyを使用して1行でそれを行う:

[list(e[1])[0][1] for e in itertools.groupby(zip(Day,Time),lambda t:t[0])]) 

結果:

['08:05', '08:01', '08:08', '10:33', '08:05', '06:53', '08:15', '08:03', '08:11', '08:05', '08:03', '09:23', '08:10', '08:05', '08:10', '08:26', '01:43', '08:01', '08:10', '01:14', '08:06', '08:06'] 

をあなただけの場合はlist(e[1])[-1][1]

0

で用語を置き換え、最後アイテムを維持したい場合あなたは@Keiwanが提案したことをしようとしており、不要な値を削除するのではなく新しいリストを作成することを検討します。リストランタイムの複雑さから要素を削除するのはO(n)ですが、アイテムをリストに追加するのは通常O(1)です。空に初期化された新しい時代のリストを有する

  • 空に初期化され、

    • 「すでに使用日」のセットを持つ -

      適切なソリューションは、したがって、だろう

    • は、それが「すでに使用中に表示されるかどうかを確認、日ごとに日

    • のリスト上で実行されています";そうであればスキップしてください。そうでない場合は、そのセットに追加し、「新しい時間」に適切な時間を追加します。

  • 関連する問題