1

列からのレコードのリストがあり、リストには日付という名前が付けられています。リストから別の日付を取得しようとしています。リストには、2010 年 1 月 1 日、2010 年 1 月 1 日など、繰り返しの日付が多数含まれています。しかし、異なる日付もあります。しかし、私が使用する場合:

for date in dates: ....

異なる日付ではなく、すべての日付(同じかどうかに関係なく)に対してループを繰り返しています。どうすればそれを行うように指示できますか:

for differentdate in dates:... 

言語はパイソン!!

4

4 に答える 4

5
for date in set(dates):

set()別のコレクションの一意の要素からコレクションを作成します。注:これでは元のリストの順序が保持されない場合があるため、その順序を保持する必要がある場合は、@GregHewgillの回答を参照してください。

于 2011-03-25T19:57:27.157 に答える
5

itertoolsモジュールを使用して、日付でグループ化できます。例えば:

>>> import itertools
>>> a = ["aaa", "bbb", "bbb", "ccc"]
>>> for k, g in itertools.groupby(a):
...   print(k)
... 
aaa
bbb
ccc

これにより、要素の元の順序が保持されaます (これは重要な場合があります)。ループ内にgは、そのキーを持つ各要素を含むシーケンスを生成するジェネレーターがあります。詳細については、ドキュメントを参照してitertools.groupbyください。

于 2011-03-25T20:00:23.040 に答える
0

順序を維持することが重要である場合、シーケンスから重複を削除するActiveState レシピに関する Alex Martelli のコメントから派生した次のジェネレータ関数が機能します (また元の辞書ベースの非-ジェネレータ Martelli の例):

dates = ["1/1/2010", "1/3/2010", "1/3/2010", "1/7/2010"]

def unique(seq, idfun=lambda x: x):
    seen = set()
    for item in seq:
        marker = idfun(item)
        if marker not in seen:
            seen.add(marker)
            yield item

for date in unique(dates):
    print date

# 1/1/2010
# 1/3/2010
# 1/7/2010

もう 1 つの優れた機能は、かなり柔軟であり、idfun比較対象のデータを取得するために使用するカスタムを提供することで、他のデータ構造に適応できることです。

于 2011-03-25T21:39:19.020 に答える
0

次のいずれか:

def uniqueItems(seq, key=None, reverse=False):
    "Returns a list of unique items in (customizable) order"
    seq = list(set(seq))
    seq.sort(key=key, reverse=reverse)

def uniqueItems(seq):
    "Generator - return unique items in original order of first occurrence"
    seen = set()
    for item in seq:
        if item not in seq:
            yield item
            seen.add(item)

として使用することができます

for date in uniqueItems(dates):
    # do something with date
    pass
于 2011-03-25T20:54:00.783 に答える