1

我有一个基本程序,它采用现有列表,要求用户输入,并在列表中搜索用户输入的元素。我希望它找到它所在的索引,并打印索引。当我输入不在列表中的值时,我收到错误消息:“ValueError: 7 is not in list”

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

编辑,添加代码:

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)

我只是想找出所有事件的索引,如果没有,打印一条错误消息。

4

5 回答 5

4

为此,您可以使用 try 和 except 来避免错误。例如看下面的代码:

>>> 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
于 2012-10-17T05:30:56.723 回答
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是一个空列表或包含可以在 中找到的所有索引。xL

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

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

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

于 2012-10-17T05:34:53.650 回答
2
print list1.index(value) if value in list1 else "Not Found"
于 2012-10-17T05:37:08.313 回答
1

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

>>> 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]
于 2012-10-17T06:07:24.977 回答
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'
于 2012-10-17T05:28:48.960 回答