Python - 在列表中查找元素位置并输出新列表

1 投票
4 回答
782 浏览
提问于 2025-04-18 07:49

我现在正在学习Python,课程中有个地方让我有点困惑。不幸的是,我下次的实践课要到下周才有,所以我想在这里问问。

我们需要写一个叫做find()的函数,这个函数要接收一个列表,查找列表中的某个值,并返回一个新列表,里面是这个值在原列表中出现的位置。例如:

list = 2, 3, 7, 2, 3, 3, 5
number = 3

输出应该是:0, 4, 5

题目要求我们使用循环,但不允许使用内置函数、切片表达式、列表方法或字符串方法,除非特别说明。这个部分唯一允许使用的方法是:.append()range()

我们有一个文件是不能编辑的:

import test_lists

list_A = ['q', 'w', 'e', 'r', 't', 'y']

print(test_lists.find(list_A, 'r'))
print(test_lists.find(list_A, 'b'))

根据我在一个叫test_lists的文件中尝试的结果,输出给了<function find at 0x0000000003B89D90>

def find(list1, listValue):

    findList = 0

    for x in range(findList):

        findList.find(list1, value)

    return find

有没有人能帮我指点一下,给我解释一下?我们被告知可以使用.append(),但我似乎不太明白这在这种情况下怎么用,因为我知道append只是用来添加到字符串里的。我感觉我有点偏离主题了。

谢谢

4 个回答

0

使用列表推导式是最符合Python风格的方法。不过为了教学目的,这里还有另一种写法。

def find(number, numList):
    indexMatches = []                    # initialize your index array
    for index in range(len(numList)):    # iterate over the list of values
        if number == numList[index]:     # compare the number against the current value
            indexMatches.append(index)   # if they match, add it to the index array
    return indexMatches                  # return the list of indexes where matches occured

find(3, [2,3,7,2,3,3,5])

输出结果

[1, 4, 5]
1

这样可以吗?

def find(list1, listValue):
    found = []
    for index in range(0,len(list1)):
        if list1[index]==listValue:
            found.append(index)
    return found
2

使用 enumerate列表推导式

>>> lst = 2, 3, 7, 2, 3, 3, 5
>>> number = 3
>>> [i for i, x in enumerate(lst) if x == number]
[1, 4, 5]

>>> list_A = ['q', 'w', 'e', 'r', 't', 'y']
>>> [i for i, x in enumerate(list_A) if x == 'r']
[3]

顺便提一下,不要把 list 当作变量名。这样会覆盖掉内置的类型/函数 list

更新

不使用 enumerate 的方法:

>>> lst = 2, 3, 7, 2, 3, 3, 5
>>> number = 3
>>> [i for i in range(len(lst)) if lst[i] == number]
[1, 4, 5]
0

我想你不能使用 enumerate 吧?

那你就得自己来做同样的事情:遍历列表的索引,对于每一个索引,检查这个位置的元素是不是你想要的元素。如果是的话,就把这个索引加到你的结果列表里:

expected_element = 3
my_list = [...]
result_list = []
for i in range(len(my_list)):
    if my_list[i] == expected_element:
        result_list.append(i)

这样做可能不是很符合 Python 的风格,但如果你有很多限制的话,我觉得这样也不错。

如果你不能使用 len(my_list) 来获取列表的长度,你可以先遍历一次列表来获取大小:

def size(l):
    s = 0
    for _ in l:
        s += 1
    return s

撰写回答