了解 python 嵌套一行 for 循环
Understanding python nested one line for loops
我试图理解一行 for 循环并将其放入嵌套 for 循环的正常命名法中。单行for循环如下:
print ''.join((letter[i - 1]for i in (int(n) for n in key.split())))
我把上面的嵌套for循环按照常规的方式写成如下:
for n in key.split():
n = int(n)
for i in n:
print ''.join(letter[i - 1])
我没有得到想要的结果。请有人解释我的想法哪里出了问题,或者上面的一行 for 循环如何按常规编写。提前致谢。
仔细查看你的一行中的括号:
print ''.join((letter[i - 1]for i in (int(n) for n in key.split())))
^---------------------------^
嵌套生成器只是一个为外部生成器提供值的序列。可以简化为
print ''.join((letter[int(i) - 1]for i in (n for n in key.split())))
或者只是
print ''.join(letter[int(i) - 1] for i in key.split())
等效循环是
for i in key.split():
print letter[int(i) - 1], # Suppress the newline
嵌套循环简化示例。
from enum import IntEnum
class MyEnum(IntEnum):
FOO_BAR = 0
JOHN_DOE = 1
result = []
for x in MyEnum:
x_splits = []
for s in x.name.split('_'):
x_splits.append( s.capitalize() )
result.append ( ' '.join(x_splits) )
# >>> result
# ['Foo Bar', 'John Doe']
第一步:
result = []
for x in MyEnum:
x_splits = [ s.capitalize() for s in x.name.split('_') ]
result.append ( ' '.join(x_splits) )
第二步:
result = []
for x in MyEnum:
result.append ( ' '.join( s.capitalize() for s in x.name.split('_') ) )
第三步:
result = [ ' '.join( s.capitalize() for s in x.name.split('_') ) for x in MyEnum ]
结果相同:
# ['Foo Bar', 'John Doe']
我试图理解一行 for 循环并将其放入嵌套 for 循环的正常命名法中。单行for循环如下:
print ''.join((letter[i - 1]for i in (int(n) for n in key.split())))
我把上面的嵌套for循环按照常规的方式写成如下:
for n in key.split():
n = int(n)
for i in n:
print ''.join(letter[i - 1])
我没有得到想要的结果。请有人解释我的想法哪里出了问题,或者上面的一行 for 循环如何按常规编写。提前致谢。
仔细查看你的一行中的括号:
print ''.join((letter[i - 1]for i in (int(n) for n in key.split())))
^---------------------------^
嵌套生成器只是一个为外部生成器提供值的序列。可以简化为
print ''.join((letter[int(i) - 1]for i in (n for n in key.split())))
或者只是
print ''.join(letter[int(i) - 1] for i in key.split())
等效循环是
for i in key.split():
print letter[int(i) - 1], # Suppress the newline
嵌套循环简化示例。
from enum import IntEnum
class MyEnum(IntEnum):
FOO_BAR = 0
JOHN_DOE = 1
result = []
for x in MyEnum:
x_splits = []
for s in x.name.split('_'):
x_splits.append( s.capitalize() )
result.append ( ' '.join(x_splits) )
# >>> result
# ['Foo Bar', 'John Doe']
第一步:
result = []
for x in MyEnum:
x_splits = [ s.capitalize() for s in x.name.split('_') ]
result.append ( ' '.join(x_splits) )
第二步:
result = []
for x in MyEnum:
result.append ( ' '.join( s.capitalize() for s in x.name.split('_') ) )
第三步:
result = [ ' '.join( s.capitalize() for s in x.name.split('_') ) for x in MyEnum ]
结果相同:
# ['Foo Bar', 'John Doe']