Python访问嵌套列表

2024-10-02 04:37:30 发布

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

我试图访问一个嵌套列表并打印出单词。我的问题是当我进入两层时,我只能打印字母而不能打印单词。我已经在网上找到了所有的例子

def company_info(companies):
    # Complete the function here:
    str = ""
    for i in range(len(companies)) :
        for j in range(len(companies[i])) :
            str += f"{companies[i][j]}\n"
            for k in range(len(companies[i][j])) :
                str += f"{companies[i][j][k]}\n"
                            
    return str

# Sample function call
companies = [
    ['Dunder Mifflin',
        ['Management',
            ['CEO', 'Robert California'],
            ['Regional Manager', 'Michael Scott'],
            ['Assistant to the Regional Manager', 'Dwight Schrute']
        ],
        ['Sales',
            ['Salesman', 'Jim Halpert'],
            ['Salesman', 'Stanley Hudson'],
            ['Saleswoman', 'Phyllis Smith']
        ]
    ],
    ['Vance Refrigeration',
        ['Management',
            ['CEO', 'Bob Vance']
        ]
    ]
]
print(company_info(companies))

我正试图得到:

Dunder Mifflin
    Management
        Robert California - CEO
        Michael Scott - Regional Manager
        Dwight Schrute - Assistant Regional Manager
    Sales
        Jim Halpert - Salesman
        Stanley Hudson - Salesman
        Phyllis Vance - Saleswoman
Vance Refrigeration
    Management
        Bob Vance - CEO

但到目前为止,我只能得到:

Dunder Mifflin
D
u
n
d
e
r
 
M
i
f
f
l
i
n
['Management', ['CEO', 'Robert California'], ['Regional Manager', 'Michael Scott'], ['Assistant to the Regional Manager', 'Dwight Schrute']]
Management
['CEO', 'Robert California']
['Regional Manager', 'Michael Scott']
['Assistant to the Regional Manager', 'Dwight Schrute']
['Sales', ['Salesman', 'Jim Halpert'], ['Salesman', 'Stanley Hudson'], ['Saleswoman', 'Phyllis Smith']]
Sales
['Salesman', 'Jim Halpert']
['Salesman', 'Stanley Hudson']
['Saleswoman', 'Phyllis Smith']
Vance Refrigeration
V
a
n
c
e
 
R
e
f
r
i
g
e
r
a
t
i
o
n
['Management', ['CEO', 'Bob Vance']]
Management
['CEO', 'Bob Vance']

Tags: themanagerrobertmanagementscottcompaniesassistantstr
3条回答

我认为如果使用更具代表性的名称和for ... in语法而不是使用索引,那么代码更容易理解:

def company_info(companies):
    res = ''
    for company in companies:
        res += company[0] + "\n"
        for department in company[1:]:
            res += "    " + department[0] + "\n"
            for employee in department[1:]:
                res += "        " + ' - '.join(employee[::-1]) + "\n"
    return res

输出:

Dunder Mifflin
    Management
        Robert California - CEO
        Michael Scott - Regional Manager
        Dwight Schrute - Assistant to the Regional Manager
    Sales
        Jim Halpert - Salesman
        Stanley Hudson - Salesman
        Phyllis Smith - Saleswoman
Vance Refrigeration
    Management
        Bob Vance - CEO

请注意,这将适用于在f字符串中不支持反斜杠的较早版本的python;另外,使用与内置类型重叠的变量名(str)通常不是一个好主意

在每个嵌套步骤之后,您需要在切片列表上执行嵌套循环,如下所示:

for company in companies:
    print(f"{company[0]}")
    for department in company[1:]:
        print(f"\t{department[0]}")
        for staff in department[1:]:
            print(f"\t\t{staff[1]} - {staff[0]}")

其中打印:

Dunder Mifflin
        Management
                Robert California - CEO
                Michael Scott - Regional Manager
                Dwight Schrute - Assistant to the Regional Manager
        Sales
                Jim Halpert - Salesman
                Stanley Hudson - Salesman
                Phyllis Smith - Saleswoman
Vance Refrigeration
        Management
                Bob Vance - CEO

以下是一个不同方法的想法:

def company_info(companies):
    company_string=""
    for i in companies:
        if isinstance(i,list):
            for j in i:
                if isinstance(j,list):
                    for k in j:
                        if isinstance(k,list):
                            company_string+=('\t'+'  '+k[1]+' - ' + k[0]+'\n')
                        else:
                            company_string+=('\t'+k+'\n')
                else:
                    company_string+=(j+'\n')
        else:
            company_string+=(i+'\n')
                            
    return company_string

相关问题 更多 >

    热门问题