如何跳过使用额外变量进行python操作?

时间:2012-04-14 07:29:10

标签: python for-loop

我正在处理我使用过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']

4 个答案:

答案 0 :(得分: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']
>>> 

注意**我已将答案更新为不更新原始列表。

答案 1 :(得分: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]

答案 2 :(得分: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']

答案 3 :(得分:1)

如果你有灵活性,你可以这样做:

>>> ['column1']*4 + ['column2']*3
['column1', 'column1', 'column1', 'column1', 'column2', 'column2', 'column2']