我有这样一个清单:
[u'1.9', u'comment', u'1.11', u'1.5', u'another comment']
我想将它拆分为元组,这样数字字符串(对于isdigit(item[0])
是True
)与紧跟其后的注释配对,或者如果没有注释,则与空字符串配对(即,下一项是另一个数字字符串)。你知道吗
换句话说:
[
(u'1.9', u'comment'),
(u'1.11', ''),
(u'1.5', u'another comment'),
]
最干净的方法是什么,尤其是在列表长度可能是奇数或偶数的情况下?你知道吗
下面是如何在一个单一的列表理解。你知道吗
首先,“isdigit”看起来只能是测试整数,所以为了简单起见,我首先假设输入是:
那么解决方案是一个线性:
解释
zip生成所有对
然后使用下面的if语句过滤以整数字符串开头的对。你知道吗
最后,使用if else语句生成结果,结果可以是(i,'')或(i,s)
顺便说一句,当lst中只有一个元素时,这不起作用。在这种情况下,你应该特别处理。你知道吗
最好使用生成器函数进行配对:
然后,您可以在生成器上迭代,或使用以下命令从中生成一个列表:
这也适用于结尾有数字但没有以下注释的情况:
相关问题 更多 >
编程相关推荐