当前位置:  开发笔记 > 编程语言 > 正文

大多数pythonic方式扩展可能不完整的列表

如何解决《大多数pythonic方式扩展可能不完整的列表》经验,为你挑选了2个好方法。

我正在寻找的是最好的方式,'如果这个列表太短,将它延长到9个元素并添加'选择4','选择5'等作为附加元素.另外,用'Choice x'替换任何'None'元素.也可以替换""和0.

一个示例转换将是

['a','b',None,'c']

['a','b','Choice 3','c','Choice 5','Choice 6','Choice 7','Choice 8','Choice 9']

我的初始代码滥用try/except并且有一个我没注意到的一个一个错误; 感谢joeforker和所有指出的人.根据评论,我尝试了两个同样测试良好的简短解决方案:

def extendChoices(cList):
  for i in range(0,9):
    try:
      if cList[i] is None:
        cList[i] = "Choice %d"%(i+1)
    except IndexError:
      cList.append("Choice %d"%(i+1)

def extendChoices(cList):
  # Fill in any blank entries
  for i, v in enumerate(cList):
    cList[i] = v or "Choice %s" % (i+1)

  # Extend the list to 9 choices  
  for j in range(len(cList)+1, 10):
    cList.append("Choice %s" % (j))

我认为#2赢得更多pythonic,所以它是我将使用的那个.它易于理解和使用常见的结构.拆分步骤是合乎逻辑的,可以使人们更容易理解.



1> ephemient..:

不同的是zip,Python会map自动扩展更短的序列None.

map(lambda a, b: b if a is None else a,
    choicesTxt,
    ['Choice %i' % n for n in range(1, 10)])

你可以将lambda简化为

map(lambda a, b: a or b,
    choicesTxt,
    ['Choice %i' % n for n in range(1, 10)])

如果它没关系在对待其他错误状物体choicesTxt一样None.



2> James Brady..:

我最初的反应是将列表扩展和"填充空白"分成不同的部分,如下所示:

for i, v in enumerate(my_list):
    my_list[i] = v or "Choice %s" % (i+1)

for j in range(len(my_list)+1, 10):
    my_list.append("Choice %s" % (j))

# maybe this is nicer for the extension?
while len(my_list) < 10:
    my_list.append("Choice %s" % (len(my_list)+1))

如果你坚持使用这种try...except方法,就像Douglas所说的那样抓住一个特定的例外.否则,你会抓住一切:KeyboardInterrupts,RuntimeErrors,SyntaxErrors,....你不想那样做.

编辑:修复1索引列表错误 - 谢谢DNS!

编辑:添加替代列表扩展

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有