Python 在列表中搜索元素的索引,如果找不到,请告知用户

Python 在列表中搜索元素的索引,如果找不到,请告知用户,python,list,indexing,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: ")

我有一个基本程序,它获取现有列表,请求用户输入,并在列表中搜索用户输入的元素。我想让它找到它所在的索引,然后打印索引。当我输入一个不在列表中的值时,我会收到错误消息:“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)

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

试着对照列表做一个简单的检查(这只是一个简单的例子,不涉及多个事件,等等)这使用了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'

试着对照列表做一个简单的检查(这只是一个简单的示例-不处理多次出现的情况,等等)。这使用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'

为此,您可以使用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

为此,您可以使用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

.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
中找到

编辑:没有
枚举的“硬”方法

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

返回相同的结果,即如果未找到任何内容,则返回空列表。

.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"
print list1.index(value) if value in list1 else "Not Found"
L2
是一个空列表,或包含所有的
x
索引,这些索引可以在
L
中找到

编辑:没有
枚举的“硬”方法

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

返回相同的结果,即如果未找到任何内容,则返回空列表。

使用枚举进行列表理解是执行类似操作的常用方法,但使用真正的基本概念也没有那么困难

print list1.index(value) if value in list1 else "Not Found"
>>> 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]

使用枚举进行列表理解是完成类似操作的常用方法,但使用真正的基本概念也没有那么困难

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


向我们展示您目前拥有的代码。
try:。。。捕获:…
阅读python文档:)@JoelCornett嗯,它的
尝试:。。。除此之外:…
但那个OP必须找到他自己。@RohitJain:哇,那对我来说是一个很大的大脑放屁;)@RohitJain:我抵制删除我的原始评论的冲动,同时尝试将我的脚从我的嘴里移开。给我们看看你到目前为止的代码。
try:。。。捕获:…
阅读python文档:)@JoelCornett嗯,它的
尝试:。。。除此之外:…
但那个OP必须找到他自己。@RohitJain:哇,那对我来说是一个很大的大脑放屁;)@RohitJain:我抵制着删除我的原始评论的冲动,同时试着把我的脚从嘴里移开。-1:裸露的
除了
是不好的。如果用户输入
a
,他将收到一条误导性错误消息。感谢您的评论。希望在将来不会犯这个错误。@Myjab--不要在将来试图避免它,还要修复你的代码。我搞糊涂了,伙计。我已经在try和except块中获得了输入。但你以前有过。在这两种情况下,如果用户输入“a”,则会出现ValueError。如果我错了,请更正我。然后用户会收到一条错误消息:
ValueError:invalid literal for int(),以10为基数:“a”
。当然,您也可以通过使用另一个
try/except
块包围
raw\u input()
调用来捕捉到这一点。如果用户输入
a
,他将收到一条误导性错误消息。感谢您的评论。希望在将来不会犯这个错误。@Myjab--不要在将来试图避免它,还要修复你的代码。我搞糊涂了,伙计。我已经在try和except块中获得了输入。但你以前有过。在这两种情况下,如果用户输入“a”,则会出现ValueError。如果我错了,请更正我。然后用户会收到一条错误消息:
ValueError:invalid literal for int(),以10为基数:“a”
。当然,你也可以通过另一个
try/except
块围绕
raw\u input()
调用来捕捉到这一点。谢谢,你的答案是最好的,但我不能使用它,因为我无法向教授解释枚举是如何工作的,因为我们在课堂上没有讨论它。我只是想通过找到一个元素的索引,删除它,然后找到更多相同数目的索引来完成这项工作。如果元素不在列表中,是否有其他方法可以停止错误消息?您可以向教授解释,您正在秘密阅读(ZOMG!)@user1752061-请参阅我的“艰难之路”解决方案。它必须解析列表两次。谢谢,你的答案是最好的,但我不能使用它,因为我无法向我的教授解释枚举是如何工作的,因为我们在课堂上没有讨论它。我只是想通过找到一个元素的索引,删除它,然后找到更多相同数目的索引来完成这项工作。如果元素不在列表中,是否有其他方法可以停止错误消息?您可以向教授解释,您正在秘密阅读(ZOMG!)@user1752061-请参阅我的“艰难之路”解决方案。它必须解析列表两次。感谢您使用基本代码,但它仍然