Python - 在列表中查找值位置并输出为新列表

时间:2014-05-28 12:22:03

标签: python list

目前在我的课程中学习python,我在这方面有点困惑,不幸的是我的下一个实践直到下周,所以我想我会在这里问。

我们应该编写一个名为find()的函数,它接受一个列表,搜索列表中的值并返回列表中找到该数字的位置的新列表。例如:

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

输出结果为:0, 4, 5

这个问题要求我们使用循环,但不要使用内置函数,切片表达式,列表方法或字符串方法,除非指定,只有为此部分指定的是:.append()和{{ 1}}。

我们已经提供了一个我们不允许编辑的文件:

range()

根据我在名为test_lists的文件中尝试的内容,输出结果为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'))

<function find at 0x0000000003B89D90>

任何人都能够把我推向正确的方向并向我解释一下吗?我们被告知我们可以使用def find(list1, listValue): findList = 0 for x in range(findList): findList.find(list1, value) return find ,但我似乎并不了解这种情况如何适应这种情况,因为我知道附加只会增加字符串。我觉得我离赛道很远。

由于

5 个答案:

答案 0 :(得分:2)

使用enumeratelist comprehension

>>> 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]

答案 1 :(得分:1)

这会吗?

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

答案 2 :(得分: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)

它不是非常pythonic但如果你有这么多的束缚,我觉得它很好

如果你不能使用len(my_list),你可以通过第一次迭代来获得大小:

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

答案 3 :(得分:0)

我认为falsetru给出的答案是最优雅的。

说到这一点,我不知道他的答案是否会帮助你当前技术水平的人使用python,更“广泛地,像程序员一样思考”。考虑使用以下步骤解决练习:

  1. 循环浏览列表(这是range()发挥作用的地方)
  2. 检查该索引处的当前元素,看它是否是您要查找的元素
  3. 将其添加到该函数返回的另一个列表中(这是append()发挥作用的位置

答案 4 :(得分:0)

列表理解将是最恐怖的方式。但是为了教学目的明确地写它,这是另一种方法。

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]