首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据带有索引的列表检查索引

根据带有索引的列表检查索引
EN

Stack Overflow用户
提问于 2012-01-09 09:53:30
回答 6查看 210关注 0票数 0

如果我在Python中有一个列表列表,并从列表的各个部分创建列表,我如何检查索引在哪个列表中。

例如:

代码语言:javascript
复制
LOL = [
    [4, 5, 6],
    [7, 1, 8],
    [6, 2, 9]
    ]
list1 = [LOL[0][0], LOL[0][1], LOL[1][1]]
list2 = [LOL[2][2], LOL[2][1], LOL[1][2]]
list3 = [LOL[2][0], LOL[1][2], LOL[0][2]]

(这些索引完全是故意的。)此列表列表(LOL)中的1位于索引LOL[1][1] (1,1)。我如何检查它在三个列表中的哪一个: list1、list2和/或list3?

代码语言:javascript
复制
if 1 in row for row in LOL:
    (search the list that the 1 is in for 6. The integers contained in the lists in LOL are just examples, there could be multiple 1's in the lists in LOL.)

如果括号内有实际的Python Syntax来完成所描述的任务,则将搜索list1,并且因为该列表中没有任何6,所以If语句将失败。我如何填写括号中的部分,以便它具有正确的Python语法来完成此处描述的任务?

EN

回答 6

Stack Overflow用户

发布于 2012-01-09 13:34:58

这个问题有两个很多的问题,而且评论太多,所以我在答案中放了以下内容:

首先,在

list1 = [LOL,LOL,LOL1] list2 = [LOL2,LOL2,LOL1] list3 = [LOL2,LOL1,LOL]

索引是正确的吗?或者他们应该是

代码语言:javascript
复制
  list1 = [LOL[0][0], LOL[0][1], LOL[0][2]] 
  list2 = [LOL[1][0], LOL[1][1], LOL[1][2]] 
  list3 = [LOL[2][0], LOL[2][1], LOL[2][2]]

第二,

在这个列表列表中的索引是在

LOL1。

这句话说不通。“1”指的是“1”,从LOL1包含“1”的意义上讲,它位于“index”(1,1)。LOL1不是一个索引,它是一个值(实际上,它指的是一个值)。

如何检查它在哪个列表中?

你说的是哪一份清单?list1、list2或list3 (即查找其中哪个引用了“1”),或者LOL、LOL1、LOL2 (即查找引用了“1”的行)?因为LOL包含3个项目,每个项目都有一个(整数)列表。LOL不包含任何整数( LOL中的项包含整数)。

出于这个原因,

LOL中的

if 1:

无效Python: LOL不包含任何整数。如果它是伪代码,这是有意义的。

另一个问题:

(在1所在的列表中搜索0。

0不在任何列表中,这是令人困惑的,是打字错误吗?

LOL只是一个例子,可能有多个。)

多个LOL?存在多个LOL的事实与在LOL中查找某些内容的任务有什么关系?或者你真正拥有的是这样的:

代码语言:javascript
复制
  list1 = [LOL2[1][2], LOL1[0][2], LOL3[2][2]]
  list2 = [LOL2[1][2], LOL2[0][2], LOL0[2][2]]
  list3 = [LOL1[1][2], LOL0[0][2], LOL3[0][2]]

其中我随机选取了LOL0/1/2/3作为示例。在这种情况下,您要解决的是,如果您发现'1‘在LOL2中,那么它在LOL2中的(行,列)索引是什么?行列将使LOL2row为'1‘饱和。但这对我来说也没有多大意义。

最后,如果您可以提供一个示例答案,如“答案将是list2”或“答案将是LOL1",这将对理解您试图实现的目标有很大帮助。

请用上面的所有内容来澄清你的帖子,以减少来回评论的次数,现在有大量的噪音,我真的很想标记这个问题,这样你就可以从头开始(我觉得这是一个很好的问题,所以我希望看到它)。

票数 1
EN

Stack Overflow用户

发布于 2012-01-12 11:16:54

list1、2和3不包含对LOL中数字的引用。请考虑以下内容:

代码语言:javascript
复制
Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> ll=[1,2,3]
>>> kk=[ll[1], ll[0], ll[2]]
>>> kk
[2, 1, 3]
>>> ll[2]=5
>>> kk
[2, 1, 3]
>>>

因此,您显示的代码一旦执行,就会在Python解释器中显示以下代码:

代码语言:javascript
复制
LOL = [
    [4, 5, 6],
    [7, 1, 8],
    [6, 2, 9]
    ]
list1 = [4, 5, 1]
list2 = [9, 2, 8]
list3 = [6, 8, 6]

也就是说,没有数字的引用,只有数字本身。

由于1是唯一的,您可以通过元素搜索找到它所在的列表1/2/3,但是对于像8这样的数字,将有两个答案(list2和list3)。而且,正如我的第一个代码示例中所示,没有办法知道数字对应于哪个LOL项: list3是LOL还是LOL2?没有办法知道。

OTOH,如果你在LOL列表中存储对象而不是数字,你可以通过引用找到它们。考虑下面的代码:

代码语言:javascript
复制
>>> a,b,c=[0],[1],[2]
>>> ll=[a,b,c]
>>> ll
[[0], [1], [2]]
>>> a[0]=5
>>> ll
[[5], [1], [2]]
>>>

这表明ll正在存储对a、b、c的引用,因为这些引用本身就是对象。

然后可以找到a,b,c中的哪一个包含给定的数字,并找到该数字在ll中的具体位置:

代码语言:javascript
复制
if 2 in a: 
   return ll.index(a)
if 2 in b: 
   return ll.index(b)
if 2 in c: 
   return ll.index(c)

考虑到上述情况,我怀疑答案是你无法得到你正在寻找的东西,除非你重写你的LOL和3列表来包含对象,如下所示:

代码语言:javascript
复制
a,b,c,d,e,f,...=[0],[1],[2],[4],[2],[6],...
LOL=[[a,b,c],[d,e,f],[g,h,i]]
list1=[a,c,f]
list2=[d,a,b]
list3=[f,g,a]

然后,如果您正在寻找c,它与e具有相同的数字,但它是一个不同的对象,您可以这样做

代码语言:javascript
复制
index = getIndex(c[0], list1)
if index >= 0:
    return getLOLItem(list1[index])

哪里

代码语言:javascript
复制
def getLOLItem(item):
    for subLOL in LOL: 
       if item in subLOL:
          return subLOL.index(item)
票数 1
EN

Stack Overflow用户

发布于 2012-01-09 09:57:17

代码语言:javascript
复制
if 1 in some_list:
   ...

至于如何检查不同的变量,请不要这样做,而是将它们放在列表或字典中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8783148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档