【问题标题】:how to skip use of extra variable for python operation?如何跳过使用额外变量进行 python 操作?
【发布时间】:2012-04-14 07:29:10
【问题描述】:

我正在编写我使用临时变量的 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']

【问题讨论】:

  • 你能举一些输入输出的例子吗?
  • 用预期的输入输出更新了问题
  • 输入列表的第一个条目是否可以等于'' ?
  • 我认为问题在于将temp 变量命名为temp。程序应该做什么让我困惑了半分钟。将其重命名为“previous_header”可能有助于首先解决您的问题。虽然我是站在观察者的角度说的,但是命名变量真的很重要。

标签: python for-loop


【解决方案1】:

你可以试试这样的

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

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

【讨论】:

  • 以上修改列表data。如果不允许,请先复制:header = list(data)。那么你还需要处理零情况:如果data[0]为空,它应该变成什么?原始代码将输出列表元素 header[0] 留空。
【解决方案2】:
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]

【讨论】:

    【解决方案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 为妙计。有那么一瞬间我以为你在用 PASCAL 写东西……我不知道为什么。
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多