为了摆脱由print
引入的额外空间,你可以使用sys.stdout.write()
数据写入标准输出:
In [55]: letters = ('a', 'b', 'c', 'd')
In [56]: convert = {'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4}
In [57]: import sys
In [58]: for letter in letters: sys.stdout.write(convert[letter])
1234
请注意,这里提出的大多数解决方案(包括我的)都会为您提供的输入数据生成预期输出,但请参阅letters
包含的字母(如'e'
)不是convert
中的键时会发生什么情况:
In [59]: letters = ('a', 'b', 'c', 'd', 'e')
In [60]: print ''.join(str(convert[letter]) for letter in letters)
Traceback (most recent call last):
File "<ipython-input-60-da3963dcc14b>", line 1, in <module>
print ''.join(str(convert[letter]) for letter in letters)
File "<ipython-input-60-da3963dcc14b>", line 1, in <genexpr>
print ''.join(str(convert[letter]) for letter in letters)
KeyError: 'e'
为了避免这种情况,我建议你使用dict.get()
作为该方法返回(在下面的例子中''
)的默认值,而不是抛出一个错误时,关键是不是在词典:
In [61]: print ''.join(str(convert.get(letter, '')) for letter in letters)
1234
这可以在循环内完成吗? – fugu
@fugu循环处于'join'函数调用 –
@m_callens - 但是如果我想通过'letters'中的'characters'在更大的循环内完成此操作,该怎么办? – fugu