我要找的是最好的方式来说,'如果这个列表太短,请将其延长到9个元素,并添加'Choice 4'、'Choice 5'等作为附加元素。另外,将任何“None”元素替换为“Choice x”。也可以替换“”和0。在
转换的一个例子是
['a','b',None,'c']
到
^{pr2}$我最初的代码滥用了try/except,并且出现了一个我没有注意到的off-by-one错误;感谢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胜是因为它更像Python,所以我会用它。它很容易理解并使用常见的构造。将步骤分开是合乎逻辑的,并且会使某人更容易一眼就明白。在
与
zip
不同,Python的map
自动用None
扩展较短的序列。在你可以把lambda简化为
^{pr2}$如果可以将
choicesTxt
中的其他类假对象与None
相同。在我最初的反应是将列表扩展和“填空”分成不同的部分:
如果您坚持使用
try...except
方法,那么一定要捕捉到Douglas所示的特定异常。否则,您将捕获所有内容:KeyboardInterrupts
,RuntimeErrors
,SyntaxErrors
。你不想那样做。在编辑:修复了1索引列表错误-谢谢DNS!在
编辑:添加了备选列表扩展名
我想我也会做一些类似的事情,但是要整理一下:
其中唯一重要的两个是只捕获
IndexError
,而不是任何异常,以及从0开始索引。在而原始版本的唯一真正问题是如果
choicesTxt
为空,那么添加的选项将被关闭一个。在相关问题 更多 >
编程相关推荐