将多条正文行转换为列表理解

时间:2018-10-08 12:12:25

标签: python python-3.x

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

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']]

4 个答案:

答案 0 :(得分:4)

  

我如何治疗体内的多条线

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

[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() function,则可以生成一个运行索引来替换range()循环,可以访问{{1 }}而不必编制索引;您可以使用第二个word参数(默认值从1开始)在enumerate()处开始运行索引:

0

如果您没有没有每对都有一个列表,只需直接在循环中使用[[i, char] for i, char in enumerate(word, 1)] 并获取元组:

enumerate(word, 1)

演示:

list(enumerate(word, 1))

答案 1 :(得分:3)

请尝试以下行:

[(i + 1, l) for i, l in enumerate(word)]

或带有列表:

[[i + 1, l] for i, l in enumerate(word)]

或评论中的版本(@tobias_k):

list(enumerate(word, start=1))

答案 2 :(得分:2)

我会这样做;

new_list = [list(x) for x in enumerate(word)]

这给;

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

编辑:我看到@Chris_Rands击败了我,将其作为回答,好先生!

答案 3 :(得分:2)

您对此有多种选择,还有其他列出的内容

l = [[idx, item] for idx, item in enumerate(word, 1)]

l = list(map(list, enumerate(word, 1)))

l = list(map(list, zip(range(1, len(word)+1), word)))

l = []
for idx, item in enumerate(word, 1):
    l.append([idx, item])

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