访问按钮列表多元素属性时能否使用切片操作?有何替代方案?
问题解答
你给出的写法buttons[0:3]['text'] == "X"在绝大多数常规开发场景下不合法,无法直接运行。
原因是对按钮列表做[0:3]切片操作后得到的是一个普通的子列表/子数组对象,普通的列表结构本身没有内置批量提取所有元素属性的能力,只有pandas Series这类做了特殊封装的序列类型才支持这种批量索引语法,常规业务开发中用到的按钮列表都是普通数组/列表,直接这么写会抛出类型错误。
简单易实现的替代方案
下面以Python场景为例给出常用写法,JavaScript等其他语言逻辑基本一致:
- 提取切片范围内所有按钮的text属性,返回新列表:
用列表推导式实现,可读性最高:[btn['text'] for btn in buttons[0:3]] - 判断切片范围内所有按钮的text是否都等于"X":
配合all内置函数实现:all(btn['text'] == "X" for btn in buttons[0:3]) - 更简短的函数式写法:
用map做批量转换:list(map(lambda btn: btn['text'], buttons[0:3]))
判断全匹配的写法:all(map(lambda btn: btn['text'] == "X", buttons[0:3])) - 如果有频繁的批量属性提取需求,可以自行封装通用工具函数,后续调用即可,不用重复写推导式。
如果是JavaScript场景,切片后调用数组自带的map、every方法即可:
// 提取属性 buttons.slice(0,3).map(btn => btn.text) // 判断全匹配 buttons.slice(0,3).every(btn => btn.text === 'X')
内容的提问来源于stack exchange,提问作者Xavier Asa
相关产品推荐
相关产品推荐

