首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >列出如果/else和迭代顺序的理解

列出如果/else和迭代顺序的理解
EN

Stack Overflow用户
提问于 2022-01-31 07:46:32
回答 6查看 100关注 0票数 0

我有一个CSV文件,它包含图书章节,或者是单个章节,或者是由逗号分隔的章节范围,例如1,2,4-6,12

给定这个输入'1,2,4-6,12',我想要一个列表['1','2','4','5','6','12']作为输出

与…有关的东西:

代码语言:javascript
运行
复制
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)对象。

我已经尝试了很多不同的方法,但是仍然无法正确地得到条件和迭代的顺序。我怎样才能让这些代码正常工作呢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2022-01-31 08:28:25

你想做的事:

代码语言:javascript
运行
复制
chps = [str(x)
        for entry in chapters.split(',')
        for x in (chp_range(entry) if '-' in entry else [entry])]

在网上试试!

票数 1
EN

Stack Overflow用户

发布于 2022-01-31 07:58:43

如果它必须是一个单线,这应该是可行的:

代码语言:javascript
运行
复制
>>> [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函数在理解中没有什么价值。

票数 4
EN

Stack Overflow用户

发布于 2022-01-31 07:58:26

只有在列表实际上更容易/更易读的情况下,才可以尝试使用列表理解:

代码语言:javascript
运行
复制
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)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70922632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档