我有一个CSV文件,它包含图书章节,或者是单个章节,或者是由逗号分隔的章节范围,例如1,2,4-6,12
。
给定这个输入'1,2,4-6,12'
,我想要一个列表['1','2','4','5','6','12']
作为输出
与…有关的东西:
chps=[str(x) for x in chp_range(entry)) if '-' in entry else entry for entry in chapters.split(',') ]
这不起作用。
函数chp_range('4-6')
返回一个range(4,6)
对象。
我已经尝试了很多不同的方法,但是仍然无法正确地得到条件和迭代的顺序。我怎样才能让这些代码正常工作呢?
发布于 2022-01-31 08:28:25
你想做的事:
chps = [str(x)
for entry in chapters.split(',')
for x in (chp_range(entry) if '-' in entry else [entry])]
发布于 2022-01-31 07:58:43
如果它必须是一个单线,这应该是可行的:
>>> [str(x) for c in chapters.split(",") for x in range(int(c.split("-")[0]), int(c.split("-")[-1])+1)]
['1', '2', '4', '5', '6', '12']
你不能有条件地嵌套你的理解,所以你的chp_range
函数在理解中没有什么价值。
发布于 2022-01-31 07:58:26
只有在列表实际上更容易/更易读的情况下,才可以尝试使用列表理解:
lst = []
for x in s.split(','):
if '-' in x:
start, end = x.split('-')
lst.extend([str(i) for i in range(int(start), int(end)+1)])
else:
lst.append(x)
https://stackoverflow.com/questions/70922632
复制相似问题