python - 如何操作列表
问题描述
我不知道我的标题是正确的还是有意义的,但这是我唯一想到的,因为 split() 方法将字符串输入转换/拆分为列表。
这是我的代码
import re
fruits = "apple,orange,mango*banana"
listOfFruits = re.split("[,*]",fruits)
storage = ""
for i in range(0, len(listOfFruits)):
storage = storage + ("({}) \n({})\n".format(listOfFruits[i], listOfFruits[i]))
finalStorage = storage + "\n"
print(finalStorage)
输出看起来像这样
(apple)
(apple)
(orange)
(orange)
(mango)
(mango)
(banana)
(banana)
我想要的是,每当代码看到星号(*)时,它会自动缩进它之前的单词
我想要我的输出
(apple)
(apple)
(orange)
(orange)
(mango)
(banana)
(banana)
(mango)
其他示例
fruits = "mango+banana+grapes,orange+apple
预期的输出应该是这样的
(mango)
(banana)
(grapes)
(grapes)
(banana)
(mango)
(orange)
(apple)
(apple)
(orange)
解决方案
您可以使用递归方法来完成艰苦的工作,如下所示:
def get_levels(section, tab_num=0):
if not section:
return ''
sublevels = get_levels(section[1:], tab_num + 1)
return '\t'*tab_num + '(' + section[0] + ')\n' + \
sublevels + ( '\n' if sublevels else '') + \
'\t'*tab_num + '(' + section[0] + ')'
def print_fruits(fruits):
listOfFruits = fruits.split(',')
storage = ""
for fruit in listOfFruits:
storage += get_levels(fruit.split('*'), 0) + '\n'
print(storage)
使用您的示例调用后print_fruits
,输出如下:
>>> print_fruits("apple,orange,mango*banana")
>>> print_fruits("mango*banana*grapes,orange*apple")
(apple)
(apple)
(orange)
(orange)
(mango)
(banana)
(banana)
(mango)
(mango)
(banana)
(grapes)
(grapes)
(banana)
(mango)
(orange)
(apple)
(apple)
(orange)