我正在尝试将一个嵌套列表拆分为多个列表,并动态分配其名称。直到现在,我都尝试了下面的代码,但是只有在子列表的长度相等并且我们手动为其命名时,它才起作用。
sub_list = [[1,2,3],[4,5], [2]]
当我们有不等长的子列表(如(x,y,w,h = cv2.boundingRect(contour)
outlined_image = cv2.rectangle(image, (x, y), (x + w, y + h), (0,255,0), 1)
cv2.putText(outlined_image, 'Fedex', (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (100,255,100), 2)
)并且没有给出列表动态名称时,上述方法将失败。
我知道可以通过for循环来完成,但是我无法使用循环来创建list_name。
任何帮助都将帮助我进一步结束工作
答案 0 :(得分:0)
您可以按以下方式使用zip_longest
中的itertools
:
sub_list = [[1,2,3],[4,5], [2]]
from itertools import zip_longest
l1, l2, l3 = map(list, zip_longest(*sub_list))
print(l1)
print(l2)
print(l3)
Output:
# [1, 4, 2]
# [2, 5, None]
# [3, None, None]
答案 1 :(得分:0)
回答第一个问题:如果您不想提供手动名称,则将map()仅仅添加到一个变量中:
sub_list = [[1,2,3],[4,5,5], [2,63,6]]
rotated = map(list, zip(*sub_list))
for r in rotated:
print(r)
# Output
# [1, 4, 2]
# [2, 5, 63]
# [3, 5, 6]
答案 2 :(得分:0)
不确定要完成什么,但是我建议您看一下:
itertools.zip_longest()
:Python: zip-like function that pads to longest length?(之后您可以过滤掉None
s)答案 3 :(得分:0)
在您的两种特殊情况下,以下代码都将执行:
名称是通过过程/动态生成的
def rotate_list_matrix(rows):
nrows = len(rows)
col_counts = map(lambda lyst: len(lyst), rows)
ncols = max(col_counts)
for ci in range(0, ncols): # column index
lyst = list()
list_name = "l" + str(ci + 1)
globals()[list_name] = lyst
for ri in range(0, nrows):
try:
lyst.append(rows[ri][ci])
except:
break
return
list_mata = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
list_matb = [[1, 2, 3],
[4, 5 ],
[7 ]]
rotate_list_matrix(list_matb)
print(l1)
print(l2)
print(l3)