首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这份清单不起作用。TypeError:列表索引必须是整数或切片,而不是str

为什么这份清单不起作用。TypeError:列表索引必须是整数或切片,而不是str
EN

Stack Overflow用户
提问于 2018-09-23 02:58:10
回答 4查看 602关注 0票数 2

我是Python新手,我正在做一个介绍项目。有人能告诉我为什么这不管用吗?如何解决它。基本上,用户给出了一个单词列表,如果这个单词不是复数,它应该添加一个"s“。但这行不通..。这是密码。我感谢所有的反馈。非常感谢。

代码语言:javascript
复制
def pluralize_words():

#########################################################
#Checks if words in plural_words are indeed plural and corrects them if not##
#########################################################

    global singular_words
    global plural_words

    for i in plural_words:
        if plural_words[i].endswith("s"):
            word_is_plural = True
        else:
            word_is_plural = False
            plural_words[i] = word + "s"

    print(plural_words)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-09-23 03:38:15

这是一个很好的列表理解点,我们可以使用endswith('s')进行查询。

代码语言:javascript
复制
words = ['sings', 'dance', 'runs', 'hides']

plural = [i if i.endswith('s') else i + 's' for i in words]

chrx@chrx:~/python/stackoverflow/9.22$ python3.7 uk.py唱“、”舞蹈“、”跑“、”躲藏“

票数 -1
EN

Stack Overflow用户

发布于 2018-09-23 03:27:14

斯蒂芬和U9分别给出了很好的解决方案。我将解释为什么您的代码不起作用。注意,plural_words是一个字符串列表。因此,当您调用for i in plural_words:时,您正在对该列表中的单词进行迭代,因此每次迭代都得到字符串本身(而不是一个数字)。例如:

输入:

代码语言:javascript
复制
plural_words = ['bark','dog','cats']
for i in plural_words:
    print(i)

输出:

代码语言:javascript
复制
bark
dog
cats

由于每次迭代都将I设置为列表中的字符串,因此使用该字符串作为索引调用列表中的项是没有意义的(因为列表只能具有整数索引)。如果我使用示例plural_words列表在上面运行您的代码,那么我将调用的第一次迭代是复数_words‘’bark‘,这将给出您刚才收到的特定错误。为了避免这个问题,您可以使用U9提到的枚举,或者可以遍历列表长度的范围(所以我是一个数字)。下面是一个示例:

输入:

代码语言:javascript
复制
plural_words = ['bark','dog','cats']
for i in range(len(plural_words)):
    print('i:', i)
    print('word:', plural_words[i])

输出:

代码语言:javascript
复制
i: 0
word: bark
i: 1
word: dog
i: 2
word: cats

在本例中,len(plural_words)为3,因此您实际上正在运行for i in range(3)

票数 1
EN

Stack Overflow用户

发布于 2018-09-23 03:00:17

需要enumerate

代码语言:javascript
复制
def pluralize_words():
    global singular_words
    global plural_words

    for idx,i in enumerate(plural_words):
        if i.endswith("s"):
            word_is_plural = True
        else:
            word_is_plural = False
            plural_words[idx] = i + "s"

    print(plural_words)    

更好的办法是:

代码语言:javascript
复制
plural_words=[i if i[-1]!='s' else i+'s' for i in plural_words]

或者:

代码语言:javascript
复制
plural_words=list(map(lambda x: x+'s' if x[-1]!='s' else x,plural_words))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52462570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档