在A列表中搜索元素的索引,如果未找到,则让用户知道

时间:2012-10-17 05:19:09

标签: python list indexing

我有一个基本程序,它接受现有列表,询问用户输入,并在列表中搜索用户输入的元素。我希望它找到它所在的索引,并打印索引。当我输入一个不在列表中的值时,我收到错误消息:" ValueError:7不在列表中"

如何阻止程序提供错误消息,或让用户知道该值不在列表中?

编辑,添加代码:

L = [4, 10, 4, 2, 9, 5, 4]
L2 = []
print ("L = ",L)
x = input("Enter an element to search for in the list: ")
x = int(x)

m = L.index(x)
L2.append(m)
print("Found occurences at indexes: ",L2)

我只想查找所有事件的索引,如果没有,请打印错误信息。

5 个答案:

答案 0 :(得分:4)

为此您尝试使用除了避免错误。例如,请参阅以下代码:

>>> list_1=[1,2,3,4,5]
>>> input=raw_input("Enter the number:")
Enter the number: 5
>>> try:
...     index=list_1.index(int(input))
...     print "The index is %s" %index
... except ValueError:
...     print "The number is not in the list"
...
The index is 4

如果再次执行它并输入不在列表中的值,您将获得使用except处理的消息。

Enter the number:7
The number is not in the list

答案 1 :(得分:4)

.index不是要走的路,因为它只找到第一次出现的元素。迭代整个列表并匹配各个元素:

L2 = [i for i,a in enumerate(L) if a == x]
if L2:
    print "Element found at positions: ", L2
else:
    print "Element is not in the list"

L2是一个空列表或包含所有索引,其中x可以在L中找到。

编辑:没有enumerate的“硬”方式:

L2 = []
i = -1
while x in L[i+1:]:
    i = L[i+1:].index(x) + i + 1
    L2.append(i)

返回相同的结果,即如果没有找到则为空列表。

答案 2 :(得分:2)

print list1.index(value) if value in list1 else "Not Found"

答案 3 :(得分:1)

使用枚举的列表理解是执行此类操作的常用方法,但使用真正的基本概念并不困难。

>>> L = [4, 10, 4, 2, 9, 5, 4]
>>> L2 = []
>>> x = 4
>>> for i in range(len(L)):
...     if L[i] == x:
...         L2.append(i)
... 
>>> L2
[0, 2, 6]

答案 4 :(得分:0)

尝试对列表进行简单的检查(这只是一个准确的例子 - 不会解决多次出现等问题。)这使用Python的in运算符,并且更加冗长比它需要的那样你可以看到发生了什么:

>>> def SimpleCheck(my_list, num):
...   if num in my_list:
...     return l.index(num)
...   else:
...     return 'Nada'
...
>>> l = ['one', 'two', 'three']
>>> SimpleCheck(l, 'three')
2
>>> SimpleCheck(l, 'four')
'Nada'