python - Python [x::y] 切片运算符 - 为什么对我不起作用?
问题描述
我有一个这样的列表:
residL=['M', 'P', 'P', 'M', 'L', 'S', 'G', 'L', 'L', 'A', 'R', 'L', 'V', 'K', 'L', 'L', 'L', 'G', 'R', 'H', 'G', 'S', 'A', 'L', 'H', 'W', 'R', 'A', 'A', 'G', 'A', 'A', 'T', 'V', 'L', 'L', 'V', 'I', 'V', 'L', 'L', 'A', 'G', 'S', 'Y', 'L', 'A', 'V', 'L', 'A']
期望的输出:
residL = ['M', 'P', 'P', 'M', 'L', 'S', 'G', 'L', 'L', 'A\n10', 'R', 'L', 'V', 'K', 'L', 'L', 'L', 'G', 'R', 'H\n20', 'G', 'S', 'A', 'L', 'H', 'W', 'R', 'A', 'A', 'G\n30', 'A', 'A', 'T', 'V', 'L', 'L', 'V', 'I', 'V', 'L\n40', 'L', 'A', 'G', 'S', 'Y', 'L', 'A', 'V', 'L', 'A\n50']
我可以用这段代码得到这个输出:
for i in range(9,len(residL), 10):
residL[i] = '%s\n%i'%(residL[i], i+1)
但我想花哨,所以我尝试了切片运算符:
residL[9::10] = [x+'\n%i'%(residL.index(x)+1) for x in residL[9::10]]
我得到了一个奇怪的结果:
residL = ['M', 'P', 'P', 'M', 'L', 'S', 'G', 'L', 'L', 'A\n10', 'R', 'L', 'V', 'K', 'L', 'L', 'L', 'G', 'R', 'H\n20', 'G', 'S', 'A', 'L', 'H', 'W', 'R', 'A', 'A', 'G\n7', 'A', 'A', 'T', 'V', 'L', 'L', 'V', 'I', 'V', 'L\n5', 'L', 'A', 'G', 'S', 'Y', 'L', 'A', 'V', 'L', 'A\n10']
我想知道如何修复它。只是为了学习。:)
解决方案
用于enumerate
跟踪index
>>> [x if (i-9)%10 else x+f'\n{i+1}' for i,x in enumerate(residL)]
['M', 'P', 'P', 'M', 'L', 'S', 'G', 'L', 'L', 'A\n10', 'R', 'L', 'V', 'K', 'L', 'L', 'L', 'G', 'R', 'H\n20', 'G', 'S', 'A', 'L', 'H', 'W', 'R', 'A', 'A', 'G\n30', 'A', 'A', 'T', 'V', 'L', 'L', 'V', 'I', 'V', 'L\n40', 'L', 'A', 'G', 'S', 'Y', 'L', 'A', 'V', 'L', 'A\n50']
推荐阅读
- javascript - html表中的下拉项未在行中选择正确的值
- ios - 使用 ARKIT Image 识别应用商店上的应用发布问题
- php - 致命错误:在布尔值上调用成员函数 myfunction()
- vue.js - Vue.js - 较少的文件导入引发“模块构建失败”错误,无法解析“../assets/file.less”
- boolean - 如何解决“量词层次结构以通用量词结尾”?
- python - 如何优化这个 numpy 数组操作?
- url - 将 HTTPS 域重定向到新的 HTTPS 域
- xml - 如何在我的代码中使用正确的 Max 函数?
- json - 从表格数据转换为 json 时避免转义字符
- javascript - 跟踪多个收件人的电子邮件