如何用单语句实现循环输入并收集结果至列表(无需while循环)
解决方法
你的问题出在while是语句,不能直接作为表达式赋值给变量或者嵌入列表字面量,Python不允许这种语法,所以才会报SyntaxError。
要实现不使用while循环的单语句需求,可以用Python的iter()函数结合lambda表达式来完成,代码如下:
self.languages = list(iter(lambda: input('Insert a language you know: '), 'no'))
效果验证
运行这段代码后,交互过程和你期望的完全一致:
Insert a language you know: English Insert a language you know: French Insert a language you know: no
最终self.languages的值就是['English', 'French'],完全符合需求。
原理说明
iter()函数在这里接受两个参数:
- 第一个参数是一个无参可调用对象(这里用lambda封装了带提示的input调用)
- 第二个参数是哨兵值:当可调用对象返回这个值时,迭代会立即终止,且这个哨兵值不会被加入最终的列表中。
这样就用一行语句实现了循环输入收集的功能,完全不需要显式写while循环。
内容的提问来源于stack exchange,提问作者Pyton
相关产品推荐
相关产品推荐

