每个人。在练习字符串时,我遇到了一个练习任务,这让我很难让我的代码看起来尽可能简单。
任务主体:
编写一个转置字符串列表的函数,其中每个字符串包含多个由空格分隔的单词。具体来说,它应该以这样一种方式执行,如果您将列表 ['abc def ghi', 'jkl mno pqr', 'stu vwx yz'] 传递给函数,它将返回 ['abc jkl stu', 'def mno vwx', 'ghi pqr yz'] 。
我的代码:
old_list = ['abc def ghi', 'jkl mno pqr', 'stu vwx yz']
def func(old_list):
new_list = []
sentence = ''.join(old_list)
index_one = sentence[0:3] + ' ' + sentence[11:14] + ' ' + sentence[22:25]
index_two = sentence[4:7] + ' ' + sentence[15:18] + ' ' + sentence[26:29]
index_three = sentence[8:11] + ' ' + sentence[19:22] + ' ' + sentence[30:32]
new_list.append(index_one)
new_list.append(index_two)
new_list.append(index_three)
return new_list
它看起来很“不好”,即使我能看到。我怎样才能优化它,让它看起来更干净?
让我们把问题分成两部分:
#1
假设我们有以下字符串,与您的类似。
>>> s1 = '1 2 3'
>>> s2 = '4 5 6'
>>> s3 = '7 8 9'
您可以使用.split()
分隔符将文本拆分为列表(默认情况下' '
)
>>> s1.split()
['1', '2', '3']
让我们对所有的字符串都这样做:
lists = [x.split() for x in [s1, s2, s3]]
>>> lists
[['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']]
#2
我们如何从所有列表中获取第一个元素,然后是第二个,依此类推?
我们使用zip
:https : //docs.python.org/3.3/library/functions.html#zip
>>> list(zip(*lists))
[('1', '4', '7'), ('2', '5', '8'), ('3', '6', '9')]
如果您的程序希望您将它们显示为字符串,而不是元组列表:
>>> [" ".join(x) for x in zip(*lists)]
['1 4 7', '2 5 8', '3 6 9']
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句