如何在一行代码中打印每个列表项?

时间:2015-06-17 18:15:25

标签: python

我想做类似的事情:

print ' -- Checking connectivity from {} to {}'.format((h for h in env.hosts), (h for h in dbHostList))

但是,这只会产生:-- Checking connectivity from <generator object <genexpr> at 0x2c36190> to <generator object <genexpr> at 0x2c367d0>

我知道有办法做到这一点,我只是跳过一些小东西......但我不知道是什么。任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:3)

(for object in sequence)

创建生成器。你想要这个:

[for object in sequence]

编辑:

或者这个:

print "Stuff stuff stuff {}".format(" ".join(list))

答案 1 :(得分:2)

通常,如果您的列表项是字符串,则可以使用string join

print ' '.join(env.hosts)

如果您的列表项不是字符串,则可以使用list comprehension来调用str()(假设您有一个可以通过str()转换的数据类型)来使它们成为字符串:

print ' '.join([str(h) for h in env.hosts])

答案 2 :(得分:1)

不确定您希望如何格式化列表,但您可以

print '  -- Checking connectivity from {} to {}'.format(env.hosts, dbHostList)

这将创建一个类似

的字符串
'  -- Checking connectivity from [1, 2, 3] to [4, 5, 6]'

否则,如果您想要一些特定的格式/分隔符,可以使用join,例如

print '  -- Checking connectivity from {} to {}'.format(':'.join(map(str, env.hosts)), ':'.join(map(str, dbHostList)))

哪个会打印

'  -- Checking connectivity from 1:2:3 to 4:5:6'

答案 3 :(得分:0)

如果您想为每项检查添加一行,您可以为每对主机添加join换行符和格式化字符串。 zip可以将两个列表组合在一起,以便您可以成对地迭代它们:

print '\n'.join('  -- Checking connectivity from {host} to {db_host}'
                .format(host=host, db_host=db_host)
                for host, db_host in zip(env.hosts, dbHostList))