如何获取使用“if list in list”找到的元素的索引或元素本身

时间:2010-03-16 04:23:06

标签: 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

7 个答案:

答案 0 :(得分:3)

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

for a, b in L:
  if a == element:
    print b
    break
else:
  print "not found"

但听起来你想要使用字典:

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"

请注意,虽然下面有使用 next 的更紧凑的表单,但我想象你的代码(而不是人为的例子)的实际情况是至少稍微复杂一些,所以使用阻止,如果 else 使用多个语句变得更易读。

答案 1 :(得分:1)

(注意:这个答案是指问题文本,而不是代码中给出的示例,它不完全匹配。)

打印元素本身没有任何意义,因为您已在测试中使用它:

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

答案 2 :(得分:1)

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

如果您只想检查第一个元素是否存在

>>> any(element==x[0] for x in aList)
True

找到相应的值

>>> next(x[1] for x in aList if element==x[0])
8

答案 3 :(得分:0)

>>> aList = [ ([1,2,3],4) , ([5,6,7],8) ]
>>> for i in aList:
...     if [5,6,7] in i:
...          print i[-1]
...
8

答案 4 :(得分:0)

[5, 6, 7] 您显示的aList项目,因此if将失败,而您提出的问题与此无关。更一般地说,无论如何,隐含在这样的if中的循环抛弃了索引。让代码片段工作的一种方法是(而不是if)使用类似的东西(Python 2.6或更高版本 - 如果您需要处理不同的版本,请鸣喇叭):

where = next((x for x in aList if x[0] == element), None)
if where:
  print(x[1])

更一般地说,nextprint中的表达式必须取决于aList的确切“细粒度”结构 - 在您的示例中,x[0]x[1]工作得很好,但在一个稍微不同的例子中,你可能需要不同的表达方式。没有“通用”方式完全忽略了数据的实际结构和“无论如何都神奇地工作”! - )

答案 5 :(得分:0)

一种可能的解决方案。

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

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

答案 6 :(得分:0)

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

获取元素的索引:

实际上很简单:list.index(element)。当然假设元素只出现一次。如果它出现不止一次,您可以使用额外的参数:

list.index(element, start_index):此处它将从start_index开始搜索。还有:
list.index(element, start_index, end_index):我认为这是自我解释。

在for循环中获取索引

如果你在一个列表上循环,并且想要在索引和元素上循环,那么pythonic方式是enumerate列表:

for index, element in enumerate(some_list):
    # here, element is some_list[index]

这里,enumerate是一个获取列表并返回元组列表的函数。假设您的列表为['a', 'b', 'c'],然后enumerate将返回:[ (1, 'a'), (2, 'b'), (3, 'c') ]

当你迭代它时,每个项目都是一个元组,你可以解压缩那个元组。

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

>>> t = (1, 'a')
>>> x, y = t
>>> t
(1, 'a')
>>> x
1
>>> y
'a'
>>>