我要编写以下代码作为列表理解:
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']]
答案 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']]