Python 如何获取用“找到的元素的索引或元素本身”;“列表中的if元素”;

Python 如何获取用“找到的元素的索引或元素本身”;“列表中的if元素”;,python,list,tuples,Python,List,Tuples,有没有直接的方法可以做到这一点 if element in aList: #get the element from the list 我是这样想的: aList = [ ([1,2,3],4) , ([5,6,7],8) ] element = [5,6,7] if element in aList #print the 8 >>> t = (1, 'a') >>> x, y = t >>> t (1, 'a') >

有没有直接的方法可以做到这一点

if element in aList:
   #get the element from the list
我是这样想的:

aList = [ ([1,2,3],4) , ([5,6,7],8) ]
element = [5,6,7]
if element in aList
     #print the 8
>>> t = (1, 'a')
>>> x, y = t
>>> t
(1, 'a')
>>> x
1
>>> y
'a'
>>> 
(注意:此答案指的是问题文本,而不是代码中给出的示例,它们不完全匹配。)

打印元素本身没有任何意义,因为测试中已经有了它:

if element in lst:
    print element
如果需要索引,有一种索引方法:

if element in lst:
    print lst.index(element)
如果你问这个问题是因为你想循环遍历一个列表并同时使用值和索引,那么一定要使用枚举惯用法:

for i, val in enumerate(lst):
  print "list index": i
  print "corresponding value": val
如果您只想检查第一个元素是否存在

>>> any(element==x[0] for x in aList)
True
找到相应的值

>>> next(x[1] for x in aList if element==x[0])
8
但听起来你想用字典:

L = [([1, 2, 3], 4), ([5, 6, 7], 8)]
element = [5, 6, 7]

D = dict((tuple(a), b) for a, b in L)
# keys must be hashable: list is not, but tuple is
# or you could just build the dict directly:
#D = {(1,2,3): 4, (5,6,7): 8}

v = D.get(tuple(element))
if v is not None:
  print v
else:
  print "not found"
请注意,虽然下面使用的是更紧凑的表单,但我认为您的代码(而不是人为的示例)的实际情况至少要稍微复杂一点,这样使用if和else的块对于多个语句就更可读了。

[5,6,7]
不是您显示的
列表中的项目,因此
if
将失败,您提出的问题与此不相关。更一般地说,这种
if
中隐含的循环无论如何都会丢弃索引。使代码段正常工作的一种方法是,使用类似于(Python 2.6或更高版本——如果需要在不同版本上工作,请按喇叭)的东西,而不是
if

更一般地说,
next
print
中的表达式必须取决于
aList
的精确“细粒度”结构——在您的示例中,
x[0]
x[1]
工作得很好,但在稍微不同的示例中,您可能需要不同的表达式。没有一种“通用”方式完全忽略数据的实际结构和“神奇的工作原理”!-)

一个可能的解决方案

aList = [ ([1,2,3],4) , ([5,6,7],8) ]
element = [5,6,7]

>>> print(*[y for x,y in aList if element == x])
8

你问题中的代码有点奇怪。但是,假设您正在学习基础知识:

获取元素的索引: 其实很简单:
list.index(元素)
。当然,假设元素只出现一次。如果它出现多次,则可以使用额外的参数:

list.index(元素,开始索引)
:在这里它将从
start\u index
开始搜索。还有:
list.index(元素、开始索引、结束索引)
:我认为这是自我解释

在for循环中获取索引 如果在列表上循环,并且希望在索引和元素上循环,则python方法是枚举列表:

for index, element in enumerate(some_list):
    # here, element is some_list[index]
这里,
enumerate
是一个函数,它获取一个列表并返回一个元组列表。假设您的列表是
['a','b','c']
,那么
枚举将返回:
[(1,'a'),(2,'b'),(3,'c')]

当您对其进行迭代时,每个项都是一个元组,您可以解压缩该元组

元组解包基本上是这样的:

aList = [ ([1,2,3],4) , ([5,6,7],8) ]
element = [5,6,7]
if element in aList
     #print the 8
>>> t = (1, 'a')
>>> x, y = t
>>> t
(1, 'a')
>>> x
1
>>> y
'a'
>>> 

这并没有显示如何获得“对应值”,在本例中为8。(至少直到你编辑:P)罗杰,这是问题第一部分的答案如果你不能控制列表的形式,这个问题是合理的。如果您已经创建了aList,并且希望像访问字典一样访问它,那么为什么不使用字典呢?“仍然是新的”并不是真正的答案。这是否意味着你不知道什么是词典,或者你不知道它们适用于这个问题?为什么不使用字典呢?我已经在使用它了,我不知道我能把它应用到这个问题上。我已经用一个实现了:)删除链接就在评论的正上方,在左边(就在投票的右边)。@Roger:huh,我看到链接/编辑/标记就在评论的正上方,但没有删除。也许是因为我没有注册?无论如何,我决定恢复答案,因为有人已经对它投了更高的票,但有一个警告,因为它不太中肯;但谢谢。这可能是因为注册的缘故,我希望一些答案用便条还原,而不是删除编辑,只是想帮你,因为你说你找不到它。@gnibbler:谢谢你的更正,不过我更希望在编辑后不久,比如在这里的前5分钟内,能收到评论。@Roger,对不起,我想这只是个小问题oversight@gnibbler:我经常经历快速迭代,因为我从多个角度回顾问题的阅读方式等。;在这种情况下,我得到一个警告“这篇文章已经被其他人编辑了”。不要手动搜索。使用list.index和catch ValueError。它是一个内置的,所以速度要快得多,而且使用大家都知道的方法比使用自己的方法要清晰得多。@Glenn:在这种情况下不适用。无论如何,dict解决方案将比两者都快,而且听起来dict才是OP真正想要的。
语法错误:只能将带星号的表达式用作分配目标
@Roger Pate:为了清晰起见,我删除了
打印
,但它不起作用。现在更正。谢谢还有其他改进吗??)只需使用
[…][0]
;但是,使用next和generator的其他答案更清楚(至少对我来说),如果列表为空,则允许使用默认值,并且只需要迭代列表,直到找到第一个匹配项。此外,您现在拥有的内容仅在Python3.x中有效,但是如果存在多个值,您将打印多个值,这是所需的。list.index在这里不适用,因为搜索的项不直接在列表中。
for index, element in enumerate(some_list):
    # here, element is some_list[index]
>>> t = (1, 'a')
>>> x, y = t
>>> t
(1, 'a')
>>> x
1
>>> y
'a'
>>>