创建多行的子字符串列表

2024-09-28 17:26:08 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有以下列表:

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

谢谢你的帮助。你知道吗


Tags: 字符串列表resultsplitlinesname1name2age2
3条回答

^{}是您希望呈现listtuple内容的朋友:

>>> ', '.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']

并使用^{}将字符串拆分为空白(我们只需要拆分一次):

>>> [line.split() for line in result_lines]
[['name1', 'age1', 'address1', 'email1'], ['name2', 'age2', 'address2', 'email2'], ['name3', 'age3', 'address3', 'email3']]

介绍^{}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(['{1}:{0}'.format(*line.split()) for line in result_lines])
'age1:name1, age2:name2, age3:name3'

Q.E.D

要在一行中执行此操作而不需要多次调用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'

这应该可以完成以下工作:

>>> 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

相关问题 更多 >