python - pythonic方法来识别列表中的第一个真实条件
问题描述
我有很多 QRadioButton 我已经分组在一个数组中
self.bounc1 = [self.bounc1_no, self.bounc1_1, self.bounc1_2, self.bounc1_3, self.bounc1_4, self.bounc1_5, self.bounc1_6]
self.bounc2 = [self.bounc2_no, self.bounc1_2, self.bounc2_2, self.bounc2_3, self.bounc2_4, self.bounc2_5, self.bounc2_6]
我必须返回一个列表,其中包含 [40,已检查收音机 1 的索引,已检查收音机 2 的索引],我可以使用类似的代码
ret = [40, 0, 0]
for i in range(7):
if self.bounc1[i].isChecked(): ret[1] = i
for i in range(7):
if self.bounc2[i].isChecked(): ret[2] = i
self.sendSerial.emit(ret)
有没有办法让它像
self.sendSerial.emit([40, ...... , ......])
谢谢
PS:我在 Qt creator 中对 QRadioButton 进行了分组,似乎没有简单的方法来设置 ID。
解决方案
一条线...:
self.sendSerial.emit([40, [i for i, x in enumerate(self.bounc1) if x.isChecked()][0], [i for i, x in enumerate(self.bounc2) if x.isChecked()][0]])
但老实说,这不太可读。
结合@Bakuriu的评论,缩短它的一种方法是:
self.sendSerial.emit([40] + list(map(lambda x: next(i for i, r in enumerate(x) if r.isChecked() if any(r.isChecked() for r in x) else 0, (self.bounc1, self.bounc2)))
同样,您可以看到它是多么做作,尤其是默认值为 0。
推荐阅读
- javascript - Why are csrf token's usually stored in hidden form fields?
- java - 为什么 cellInfo 的大小为零?当我用 TelephonyManager 得到它时它为零
- java - 无法在 java 8 中导入 java.util.stream
- webview - 在 webview 内部和外部打开
- r - 通过正则表达式解决缩短符号
- r - 有没有办法重新格式化以下文本文件的结构
- reactjs - ReactJs:按今天,本周,当年分组数据
- apache-flink - 如果算子的并行实例总数高于 Flink 应用程序的并行度会怎样?
- php - 带有哈希值的 url id 掩码:未配置连接 [App\User]
- sql - 选择每年销量前十的产品