2012-04-14 8 views
0

私はPythonのコードに取り組んでいます私はtemp変数を使用しています。なぜなら、存在するコンテンツがあれば、それは一時変数に追加され、それがヘッダに追加されます。
コンテンツがない場合は、一時変数が追加されます。Python操作のための余分な変数の使用をスキップする方法は?

ですから、値をリストに追加することを制限します。

私は同じ結果を得るのにtemp変数を使用しない他の細かい方法を探しています。
ご意見をお寄せください。

temp = '' 
    header = [] 
    for ind,content in enumerate(data): # enumerating for index & content in data 
     if content and ind != 0: 
      temp = content 
      header.append(content) 
     else: 
      header.append(temp) 

入力:

['column1', '', '', '', 'column2', '', ''] 

予想される出力:

['column1', 'column1', 'column1', 'column1', 'column2', 'column2', 'column2'] 
+1

入力と出力の例を教えてください。 – huon

+0

質問を入力 – sam

+2

の期待出力で更新しました。入力リストの最初の入力を ''''にすることができますか? – moooeeeep

答えて

4

あなたは**私がいないと答えを更新しました。この

>>> data=['column1', '', '', '', 'column2', '', ''] 
>>> header=data[:] 
>>> for i in range(1,len(header)): 
    if not header[i]: 
     header[i]=header[i-1] 


>>> header 
['column1', 'column1', 'column1', 'column1', 'column2', 'column2', 'column2'] 
>>> 

ノートのようなものを試すことができます元のリストを更新します。

+2

上記は 'data'のリストを変更します。それが許されない場合は、最初にコピーを作成してください: 'header = list(data)'。次に、ゼロの場合も処理する必要があります。つまり、data [0]が空の場合はどうなりますか?元のコードは出力リスト要素 'header [0]'を空のままにします。 – torek

3

一時バージョンの別のバージョン

コード:

REPEAT = object() 
def repeated(iterable): 
    for x in iterable: 
     R = last if (x is REPEAT) else x 
     yield R 
     last = R 

デモ:

>>> input = ['column1', REPEAT, REPEAT, REPEAT, 'column2', REPEAT, REPEAT] 
>>> list(repeated(input)) 
['column1', 'column1', 'column1', 'column1', 'column2', 'column2', 'column2'] 
+1

+1素晴らしいトリックです。しばらくの間、私はあなたがパスカルに何かを書いていると思っていました。なぜか分かりません。 – CppLearner

+0

haha​​haパスカル反復まで... – jamylak

4
for i, x in enumerate(data[1:], 1): 
    if not x: 
     data[i] = data[i-1] 

# or 
for i, x in enumerate(data[1:]): 
    if not x: 
     data[i+1] = data[i] 
1

あなたは柔軟性を持っている場合は、やるだけのことができます:

>>> ['column1']*4 + ['column2']*3 
['column1', 'column1', 'column1', 'column1', 'column2', 'column2', 'column2'] 
関連する問題