Python 嵌套列表理解

Python 嵌套列表理解,python,python-3.x,list-comprehension,Python,Python 3.x,List Comprehension,我经常遇到这样一个问题:我试图从一个字符串中创建一个特定长度的列表 这是一个示例,其中我有一个字符串,但希望列出长度为3的列表: x = '123456789' target_length = 3 new = [i for i in x] final = [new[i:i+target_length] for i in range(0, len(x), target_length)] print(final) 输出: [['1', '2', '3'], ['4', '5', '6'],

我经常遇到这样一个问题:我试图从一个字符串中创建一个特定长度的列表

这是一个示例,其中我有一个字符串,但希望列出长度为3的列表:

x = '123456789'

target_length = 3

new = [i for i in x]
final = [new[i:i+target_length] for i in range(0, len(x), target_length)]

print(final)
输出:

[['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']]
这很有效,但感觉很笨重


是否有更好的方法将这些参数组合成一行,或者您认为这会使代码无法阅读

这只需一行:

f2 = [[x[(j * target_length) + i] for i in range(target_length)] for j in range(target_length)]

如果你想在一行中完成,你可以在你的理解范围内创建列表:

x = '123456789'
target_length = 3

[list(x[i:i+target_length]) for i in range(0, len(x), target_length)]
>> [['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']]

这假设列表的长度为
target\u length**2
,在本例中就是这样,但只是巧合。True。AK47的答案是更好的,您可以通过在外部循环中使用
range(len(x)//target_length)
来修复或至少改进它,然后它至少对
x
的长度有效,该长度是目标长度的倍数。