初学者的Python挑战:收到TypeError:列表索引必须是整数或切片,而不是列表

我最近遇到了Python挑战。对于初学者来说可能更合适,所以您可能会发现它很容易解决。在这里:

编写一个程序,该程序接受大于1的整数n,然后通过 格式如下:

约翰先生1995年,

或:

[戴安娜女士1996],

可以用大写或小写字母(mr,mR,MR)写人的头衔,

然后只有一个空格键

,然后显示此人的名字,

然后只有一个空格键

,然后显示出生年份。

该计划的目标是检查同一年出生的男性和女性人数。如果特定年份出生的男性人数与该年出生的女性人数相同,则今年被认为是“好”年。但是,如果特定年份的男性和女性人数不同,则这些年份称为“不良”年份。

例如,假设我们有4个名称:

mR John 1987

MS Diana 1991

山姆先生1990

玛丽1987年

1987年是“好”年,因为今年出生的男性人数与女性相同。 另一方面,1991年和1990年是“糟糕”的年份。

现在,经过漫长的介绍,下面是我尝试解决的问题:

我正在创建一个包含n个列表的列表(称为名称列表),例如每个人一个(其中n = 2):

[[['mr','John','1995'],['ms','Diana','1993']]

然后,这段代码会产生一些问题:

checkedyears = []
for i in namelist:
    malecounter = 0
    femalecounter = 0
    if int(namelist[i][2]) in checkedyears: #<<<THIS IS WHERE THE ERROR OCCURS<<<
        continue
    else:
        for j in namelist:
            if namelist[i][2] == namelist[j][2]:
                if namelist[j][0] == "mr" or namelist[j][0] == "mR" or namelist[j][0] == "MR":
                    malecounter += 1
                else:
                    femalecounter += 1
    if malecounter == femalecounter != 0:
        good += 1
    else:
        bad += 1
    checkedyears.append(namelist[i][2])

我得到TypeError:列表索引必须是整数或切片,而不是列表。

因此,通过使用上面的代码,我试图比较列表中每个人的年龄。我从第一人称视角开始,使用其出生年份,然后再遍历列表中的其他人。如果我发现一个人具有相同的出生年份,则将他/她添加到适当的计数器中(男性计数器或女性计数器)。检查整个列表后,如果计数器匹配,则是“好”年,如果不匹配,则是“差”年。然后,我将今年添加到名为“ checkedyears”的列表中,因此,如果再次浏览该列表时遇到同一年,我将不再重复整个过程。

但是如上所述,我得到一个错误。

  1. 您能帮我找出问题吗?

  2. 您能建议我以其他方式解决此问题吗?

wssfeng8287 回答:初学者的Python挑战:收到TypeError:列表索引必须是整数或切片,而不是列表

此程序将产生相同的错误:

for i in namelist:
    namelist[i]

i在循环中绑定到什么值?

for i in namelist:
    print(i)

您是否希望它们成为索引?它们是实际的物品。

for person in namelist:
    person

如果需要列表中项目的索引,请使用:

for idx,person in enumerate(namelist):
    person
本文链接:https://www.f2er.com/2952779.html

大家都在问