首页 > 解决方案 > 如何操作列表

问题描述

我不知道我的标题是正确的还是有意义的,但这是我唯一想到的,因为 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)


标签: pythonstringlist

解决方案


您可以使用递归方法来完成艰苦的工作,如下所示:

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)

推荐阅读