Python 3:读取整数直至输入-1停止,能否用列表推导式简洁实现?
用列表推导式实现“读取整数直到输入-1停止”的需求
嘿,当然能用列表推导式简洁搞定这个需求!先直接上可行的代码,再给你拆解细节:
nums = [int(input()) for _ in iter(lambda: input(), '-1')]
代码逻辑拆解
这个写法的核心是利用Python内置函数iter()的特殊用法:当你给iter()传入一个无参可调用对象和一个哨兵值时,它会持续调用这个对象,直到返回值等于哨兵值时停止迭代。
这里的细节点:
lambda: input()是一个无参函数,每次调用都会获取用户的一次输入- 哨兵值设为
'-1',因为input()返回的是字符串类型,当用户输入-1时,迭代就会终止 - 列表推导式会把迭代过程中拿到的每一个输入字符串转换成整数,最终生成目标列表
验证示例输入
按照你给出的示例,依次输入1、2、3、4、5、6、7、10、-1,运行代码后会得到:
nums = [1,2,3,4,5,6,7,10]
完全符合你的期望结果。
备选:直观的常规写法(对比参考)
如果觉得列表推导式的写法有点抽象,这里给你放一个更直观的循环版本,方便你理解逻辑对应关系:
nums = [] while True: user_input = input() if user_input == '-1': break nums.append(int(user_input))
两种写法的逻辑是完全一致的,列表推导式只是把这个循环逻辑浓缩成了一行代码。
内容的提问来源于stack exchange,提问作者Joshua
相关产品推荐
相关产品推荐

