想象一下,我有以下列表:
result_lines = ['name1 age1 address1 email1',
'name2 age2 address2 email2',
'name3 age3 address3 email3']
我想打印以下字符串:
'age1:name1, age2:name2, age3: name3'
注意:字符串末尾没有,
!
更新:重要的不是订单age1:name1
。它也可以是age1:email1:name1
。
到目前为止我尝试了什么:
print "".join((l.split(' ')[1], l.split(' ')[0]) for l in result_lines)
但是,我收到以下错误消息:
TypeError: sequence item 0: expected string, tuple found
感谢您的帮助。
答案 0 :(得分:6)
str.format()
是您的朋友,您想要展示list
或tuple
的内容:
>>> ', '.join(['{1}:{0}'.format(*line.split()) for line in result_lines])
'age1:name1, age2:name2, age3:name3'
要稍微打破这一点,因为那条线上有很多......
我们从简单的列表理解开始:
>>> [line for line in result_lines]
['name1 age1 address1 email1', 'name2 age2 address2 email2', 'name3 age3 address3 email3']
使用str.split()
将字符串拆分为空格(我们只需要将拆分一次):
>>> [line.split() for line in result_lines]
[['name1', 'age1', 'address1', 'email1'], ['name2', 'age2', 'address2', 'email2'], ['name3', 'age3', 'address3', 'email3']]
介绍str.format()
和unpack the argument list:
>>> ['{0}:{1}:{2}:{3}'.format(*line.split()) for line in result_lines]
['name1:age1:address1:email1', 'name2:age2:address2:email2', 'name3:age3:address3:email3']
选择我们想要的元素:
>>> ['{1}:{0}'.format(*line.split()) for line in result_lines]
['age1:name1', 'age2:name2', 'age3:name3']
(str.
)join
这一切与', '
:
>>> ', '.join(['{1}:{0}'.format(*line.split()) for line in result_lines])
'age1:name1, age2:name2, age3:name3'
Q.E.D。
答案 1 :(得分:4)
要在没有多次分割调用的情况下在一行上执行此操作,您需要反转并切片.split()
结果,并嵌套字符串连接:
', '.join([':'.join(line.split()[:2][::-1]) for line in result_lines])
所以列表中的每个条目都是:
[::-1]
进行原位反转。':'
以提供age?:name?
对。[ ... for .. in ... ]
),因为str.join()
更快。在内部,.join()
计算加入前的最终字符串长度,并将生成器转换为列表无论如何。然后理解就会在速度上获胜。然后整个列表与', '
连接,以提供一个很好的以逗号分隔的列表。因为我们只拆分一次,这将运行
这给出了:
>>> ', '.join([':'.join(line.split()[:2][::-1]) for line in result_lines])
'age1:name1, age2:name2, age3:name3'
答案 2 :(得分:1)
这应该做的工作:
>>> result_lines = ['name1 age1 address1 email1', \
... 'name2 age2 address2 email2', \
... 'name3 age3 address3 email3']
>>> print ", ".join([l.split(' ')[1] + ': ' + l.split(' ')[0] for l in result_lines])
age1: name1, age2: name2, age3: name3