目前,我将以下内容作为将字符放入某种视觉文本地图的方式。我想知道,如果有一个非常好的简洁,pythonic方式做这个双重迭代。有什么想法吗?
lines = ['abc','456','xyz']
chars = {}
for i, row in enumerate(lines):
for j, c in enumerate(row):
chars[i,j] = c
答案 0 :(得分:4)
您可以将其表达为词典理解:
chars = {(i, j): c for i, row in enumerate(lines) for j, c in enumerate(row)}
它基本上是相同的迭代,只是表达了一点不同。
答案 1 :(得分:3)
使用词典理解。阅读嵌套理解的关键: “只需读取它们就像普通循环一样,首先描述”大循环“,然后将嵌套在其中的后续循环” { {3}}
In [1]: lines = ['abc','456','xyz']
In [2]: {(i,j): c for i, row in enumerate(lines) for j, c in enumerate(row)}
Out[2]:
{(0, 0): 'a',
(0, 1): 'b',
(0, 2): 'c',
(1, 0): '4',
(1, 1): '5',
(1, 2): '6',
(2, 0): 'x',
(2, 1): 'y',
(2, 2): 'z'}
您可以将理解分成多行,以使其更具可读性。如果仔细观察,它实际上与常规循环非常相似,只有最后一行开始。
除此之外,我还建议您阅读Brandon Rhodes的博客文章:1
# Comprehension # Regular for loop
{(i,j):c # chars = {}
for i, row in enumerate(lines) # for i, row in enumerate(lines):
for j, c in enumerate(row)} # for j, c in enumerate(row):
# chars[i,j] = c