Pythonic迭代字符串列表的方法?

时间:2013-01-26 17:18:16

标签: python

目前,我将以下内容作为将字符放入某种视觉文本地图的方式。我想知道,如果有一个非常好的简洁,pythonic方式做这个双重迭代。有什么想法吗?

lines = ['abc','456','xyz']
chars = {}
for i, row in enumerate(lines):
    for j, c in enumerate(row):
        chars[i,j] = c

2 个答案:

答案 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