2

想象一下,我有以下列表:

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

谢谢你的帮助。

4

3 回答 3

6

str.format()是您的朋友在您想要展示 alist或的内容的情况下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()解包参数列表

>>> ['{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'

量子点

于 2013-02-18T12:18:45.407 回答
4

要在没有多次调用 split 的情况下在一行上执行此操作,您需要反转和切片.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'
于 2013-02-18T12:13:56.490 回答
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
于 2013-02-18T12:11:35.233 回答