如果我在Python中有一个列表列表,并从列表的各个部分创建列表,我如何检查索引在哪个列表中。
例如:
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?
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语法来完成此处描述的任务?
发布于 2012-01-09 13:34:58
这个问题有两个很多的问题,而且评论太多,所以我在答案中放了以下内容:
首先,在
list1 = [LOL,LOL,LOL1] list2 = [LOL2,LOL2,LOL1] list3 = [LOL2,LOL1,LOL]
索引是正确的吗?或者他们应该是
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中查找某些内容的任务有什么关系?或者你真正拥有的是这样的:
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",这将对理解您试图实现的目标有很大帮助。
请用上面的所有内容来澄清你的帖子,以减少来回评论的次数,现在有大量的噪音,我真的很想标记这个问题,这样你就可以从头开始(我觉得这是一个很好的问题,所以我希望看到它)。
发布于 2012-01-12 11:16:54
list1、2和3不包含对LOL中数字的引用。请考虑以下内容:
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解释器中显示以下代码:
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列表中存储对象而不是数字,你可以通过引用找到它们。考虑下面的代码:
>>> 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中的具体位置:
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列表来包含对象,如下所示:
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具有相同的数字,但它是一个不同的对象,您可以这样做
index = getIndex(c[0], list1)
if index >= 0:
return getLOLItem(list1[index])哪里
def getLOLItem(item):
for subLOL in LOL:
if item in subLOL:
return subLOL.index(item)发布于 2012-01-09 09:57:17
if 1 in some_list:
...至于如何检查不同的变量,请不要这样做,而是将它们放在列表或字典中。
https://stackoverflow.com/questions/8783148
复制相似问题