2012-04-14 33 views
0

我正在使用一個python代碼我已經使用了temp變量,因爲如果有任何內容存在,那會附加到temp變量,然後它將被附加到標題中。
如果沒有內容,則會附加temp變量。如何跳過對python操作使用額外的變量?

因此,它會限制將「'值附加到列表中。

我正在尋找任何其他更好的方法來獲得相同的結果,但不使用臨時變量。
任何建議將會有所幫助。

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 2012-04-14 07:30:57

+0

更新了輸入的期望輸出的問題 – sam 2012-04-14 07:35:09

+2

可能輸入列表的第一個輸入等於''''? – moooeeeep 2012-04-14 07:44:05

回答

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

上面的內容修改了數據列表。如果不允許,先複製一份:'header = list(data)'。那麼你還需要處理零案例:如果data [0]是空的,它應該成爲什麼?原始代碼將輸出列表元素'header [0]'留空。 – torek 2012-04-14 07:43:59

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的好戲。有一刻我以爲你在寫PASCAL中的東西......我不知道爲什麼。 – CppLearner 2012-04-14 08:02:28

+0

haha​​ha Pascal重複,直到... – jamylak 2012-04-14 08:04:50

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']