2

文字列のリストが2つあります。約1000個の文字列要素を含むlist1には、ランダムに発生する「Date」という文字列があり、その直後に特定の日付「17/09/2011」を含む文字列が続きます。これは約70回発生します。List2の場合:文字列として約80の日付があります。

質問:両方のリストを同時にループし、list1の日付をlist2の日付に順番に置き換えるスクリプトを作成したいと思います。したがって、明らかに、list1の70の日付の代わりにlist2の最初の70の日付があります。その後、変更したlist1を.txtファイルに書き込みたいと思います。

私はこれを試しましたが、私は完全に立ち往生しています。私はPythonの初心者です。

def pairwise(lst):
    """ yield item i and item i+1 in lst. e.g.
        (lst[0], lst[1]), (lst[1], lst[2]), ..., (lst[-1], None)
    """
    if not lst: return
    #yield None, lst[0]
    for i in range(len(lst)-1):
        yield lst[i], lst[i+1]
    yield lst[-1], None

for line in file:
      list1.append(line.strip())
for i,j in pairwise(list1):
     for k in list2:
     if i == "Date":
         list1."replace"(j) # Dont know what to do. And i know this double for looping is wrong also.
4

1 に答える 1

2

おそらく次のようなものです(次の日付のない「日付」文字列がない場合):

iter2 = iter (list2)
for idx in (idx for idx, s in enumerate (list1) if s == 'Date'):
    list1 [idx + 1] = next (iter2)

with open ('out.txt', 'w') as f:
    f.write ('{}'.format (list1) )

@ user1998510、ここに少し説明があります:

enumerateリストを引数として取り、(i、リストの i 番目の要素) の形式のタプルを生成します。私のジェネレーター (つまり、(x for y in z if a)パーツ) では、このタプルのパーツをローカル変数 idx と s に割り当てます。リストの実際の項目 ( to whit s) は重要ではないため、ジェネレーター自体はインデックスのみを生成します。ジェネレーター自体では、興味深い項目をフィルター処理しますif s == 'Date'。ループでは、forこのジェネレーターを繰り返し処理して、生成された値を割り当てます(これは、Python のジェネレーターがローカル変数をリークしないため、インナーとidxは別のものです)。ジェネレーターは、要素が「Date」であるリストのすべてのインデックスと、idxidxforそれを繰り返します。したがって、すべての興味深いインデックスについて、古いリストの idx+1 番目の項目に 2 番目のリストの次の日付を割り当てます。

于 2013-01-21T23:10:16.003 に答える