将列表中的元素作为连接字符串打印

时间:2016-07-22 14:03:58

标签: python python-2.7 printing

我有一个简单的字典:

convert = {'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4}

和列表

letters = ('a', 'b', 'c', 'd')

我想迭代列表中的每个元素,并将其用作字典中的查找,并将值打印为连接字符串。我正在使用:

for c in letters:
    print convert[c],

输出:

1 2 3 4

如何删除print语句中的空格(在v.2.7.10中)以获取:

1234

5 个答案:

答案 0 :(得分:4)

join与生成器表达式一起使用。 请注意,使用此方法时必须明确转换为str

convert = {'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4}
letters = ('a', 'b', 'c', 'd')
print ''.join(str(convert[c]) for c in letters)
>> 1234 

<强>更新

如果您想使用显式for循环,可以创建一个字符串列表,附加到该字符串并在循环外调用join。我使用列表因为它更有效,因为字符串是不可变的:

output_list = []
for c in letters:
    # do other stuff
    output_list.append(str(convert[c]))
print ''.join(output_list)

答案 1 :(得分:1)

如果你想要的只是print并且你不需要最终结果,那么你可以使用arg print方法:

>>> from __future__ import print_function
>>> for c in letters:
        print(convert[c], sep='', end='')


1234

答案 2 :(得分:1)

试试这个: -

>>> convert = {'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4}
>>> letters = ('a', 'b', 'c', 'd')
>>> result = ''
>>> for i in letters:
        result += str(convert[i])  # Since you want concatenated string
>>> print result
'1234'

或使用列表理解: -

>>> convert = {'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4}
>>> letters = ('a', 'b', 'c', 'd')
>>> ''.join([str(convert[i]) for i in letters])
'1234'

答案 3 :(得分:0)

要摆脱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(),因为此方法返回默认值(下例中为''),而不是在字符中没有键时引发错误:< / p>

In [61]: print ''.join(str(convert.get(letter, '')) for letter in letters)
1234

答案 4 :(得分:0)

只是想添加一个使用reduce的替代方案,虽然它不一定更具可读性,但以后可能更灵活。如果您需要更改代码以执行其他操作,则只需调整lambda函数:

即可
>>> print reduce(lambda x,y: str(x)+str(y),[convert[z] for z in letters])
1234

或更具可读性:

>>> def concat_letters(x,y):
    return str(x)+str(y)

>>> print reduce(concat_letters,[convert[z] for z in letters])
1234