2016-04-06 9 views
-1

、データがこの形式である...分割データ - 私はいくつかのデータを分割しようとしている特定の場合

['20150406,34.4800,34.8100,34.2300,34.4200,21480500', '20150407,34.5400,34.8900,34.5100,34.6300,14331200'] 

リスト内の各文字列の最初の項目は、日付ですが、私は分割をしようとしています選択された日付のデータ。私の選択した日付が2015年4月7日上記のデータは次のように分割するでしょう...

['20150406,34.4800,34.8100,34.2300,34.4200,21480500'] 

['20150407,34.5400,34.8900,34.5100,34.6300,14331200'] 

これはまた、内の文字列のたくさんのリストのために働くために持っていた場合でも、例えば、文字列全体を持っています...希望する日付と文字列の位置を見つけるために、この同じ形式...

+0

同じ日付が複数あることはありますか?複数の要素の例を追加できますか? –

答えて

3

使用next()enumerate()、その後、スライス

>>> d = '20150407' 
>>> l = [ 
...  '20150406,34.4800,34.8100,34.2300,34.4200,21480500', 
...  '20160402,34.1,32.8100,33.2300,31.01,22282510', 
...  '20150407,34.5400,34.8900,34.5100,34.6300,14331200', 
...  '20120101,2.540,14.8201,32.00,30.1311,12331230' 
... ] 
>>> index = next(i for i, item in enumerate(l) if item.startswith(d)) 
>>> l[:index] 
['20150406,34.4800,34.8100,34.2300,34.4200,21480500', '20160402,34.1,32.8100,33.2300,31.01,22282510'] 
>>> l[index:] 
['20150407,34.5400,34.8900,34.5100,34.6300,14331200', '20120101,2.540,14.8201,32.00,30.1311,12331230'] 

カップルノート:

StopIteration例外通じ
  • next()でしょう一致が生じない場合 - あなたはtry/exceptとそれを扱うか、例えば、デフォルト値、-1を提供する必要があり、次のいずれか

    next((i for i, item in enumerate(l) if item.startswith(d)), -1) 
    
  • 日付が一致するかどうかをチェックします特定の日付文字列で始まる項目があるかどうかを確認するだけです。希望日がdateまたはdatetimeとして来る場合は、strftime()を使用して、事前にそれをフォーマットする必要があります:

    >>> from datetime import datetime 
    >>> d = datetime(2015, 4, 7) 
    >>> d = d.strftime("%Y%m%d") 
    >>> d 
    '20150407' 
    
+0

''、 ''を文字列に追加することができ、正確な部分文字列と一致します –

2

私はあなたの日付とするもので始まらない文字列をグループ化し、GROUPBYをしたいと思います日付の文字列の開始があるとして

l = ['20150406,34.4800,34.8100,34.2300,34.4200,21480500', '2015010,34.5400,34.8900,34.5100,34.6300,14331200' 
    , '20150407,34.5400,34.8900,34.5100,34.6300,14331200'] 
dte = "2015-04-07" 

delim = dte.replace("-","") + "," 
from itertools import groupby 

print([list(v) for k,v in groupby(l,key=lambda x: not x.startswith(delim))]) 

[['20150406,34.4800,34.8100,34.2300,34.4200,21480500', '2015010,34.5400,34.8900,34.5100,34.6300,14331200'], ['20150407,34.5400,34.8900,34.5100,34.6300,14331200']] 

GROUPBYが何回もデータを分割し続ける:それはそう日は、グループを区切ります。

1

by alecxe Answer: コードは元のリストを分割してサブリストを入力日付で結合することができます。

l = [ 
...  '20150406,34.4800,34.8100,34.2300,34.4200,21480500', 
...  '20160402,34.1,32.8100,33.2300,31.01,22282510', 
...  '20150407,34.5400,34.8900,34.5100,34.6300,14331200', 
...  '20120101,2.540,14.8201,32.00,30.1311,12331230', 
... '20150407,34.5400,34.8900,34.5100,34.6300,14331200',] 

index = [i for i, item in enumerate(l) if item.startswith(d)] 
[l[i:j] for i, j in zip([0]+index, index+[None])] 

output: 
[['20150406,34.4800,34.8100,34.2300,34.4200,21480500', '20160402,34.1,32.8100,33.2300,31.01,22282510'], ['20150407,34.5400,34.8900,34.5100,34.6300,14331200', '20120101,2.540,14.8201,32.00,30.1311,12331230'], ['20150407,34.5400,34.8900,34.5100,34.6300,14331200']] 
関連する問題