Python - 在列表中查找元素位置并输出新列表
我现在正在学习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
>>> 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