首页 > 解决方案 > 将多条正文线转换为列表理解

问题描述

我有以下代码要编写为列表理解:

word = "in_str"
listc=[]
for i in range(len(list(word))):
    x = []
    x.append(i+1)
    x.append(list(word)[i])
    listc.append(x)
print(listc, end="\n")

身体多条纹路怎么治疗?基本上,我想将我"in_str"的转换为以下内容:

[[1, 'i'], [2, 'n'], [3, '_'], [4, 's'], [5, 't'], [6, 'r']]

标签: pythonpython-3.x

解决方案


身体多条纹路怎么治疗

通过简化表达式;您不需要多个语句来构建嵌套列表:

[i + 1, list(word)[i]]

x = []为您提供与声明和附加两个表达式的结果相同的结果。

这将使列表理解

[
    [i + 1, list(word)[i]]
    for i in range(len(list(word)))
]

接下来,您不需要调用list(word)来获取字符串的长度或处理单个字符。字符串已经是序列,所以len(word)word[i]可以工作:

[
    [i + 1, word[i]]
    for i in range(len(word))
]

接下来,如果您使用该enumerate()函数,您可以生成一个运行索引来替换range()循环,并且word无需索引即可访问单个字符;1您可以使用第二个参数来启动运行索引enumerate()(默认是从 开始0):

[[i, char] for i, char in enumerate(word, 1)]

如果您不必为每一对设置一个列表,只需直接在循环中使用获取enumerate(word, 1)组:

list(enumerate(word, 1))

演示:

>>> word = "in_str"
>>> list(enumerate(word, 1))
[(1, 'i'), (2, 'n'), (3, '_'), (4, 's'), (5, 't'), (6, 'r')]
>>> [[i, char] for i, char in enumerate(word, 1)]
[[1, 'i'], [2, 'n'], [3, '_'], [4, 's'], [5, 't'], [6, 'r']]

推荐阅读