如果我在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语法可以完成所描述的任务,那么将搜索list1,因为该列表中没有任何6,if语句将会通过。我如何填写括号中的部分,以便它具有正确的Python语法来完成那里描述的任务?
答案 0 :(得分:1)
问题有两个问题,评论太多,所以我在回答中提出以下问题:
首先,在
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]]
指数是否正确?或者他们应该
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]]
其次,
此列表列表中的一个位于索引LOL [1] [1]。
这句话没有意义。 '1'表示'1',即LOL [1] [1]包含'1'的意义上的'索引'(1,1)。 LOL [1] [1]不是索引,它是一个值(实际上,它指的是一个值)。
我如何查看它所在的列表?
你在说什么名单? list1,list2或list3(即,在3中引用'1'中的哪一个)或LOL [0],LOL [1],LOL [2](即找到'row'为'1')参考)?因为LOL包含3个项目,每个项目都是一个列表(整数)。 LOL不包含任何整数(LOL中的项包含整数)。
出于这个原因,
如果在LOL中为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作为例子。在这种情况下,你要解决的是,如果你发现LOL2中的'1',那么LOL2中的(row,col)索引是什么?行col将饱和LOL2 [row] [col]为'1'。但这对我来说也没什么意义。
最后,如果您可以提供一个示例答案,例如“并且答案将是list2”或“并且答案将是LOL [1]”,这可以帮助您理解您想要实现的目标。
请用上述所有内容澄清你的帖子,以尽量减少来回评论的发生,现在有大量的噪音,我真的很想提出关闭的问题,所以你可以从头开始(我觉得这是一个很好的问题所以我希望能够看到它。
答案 1 :(得分:1)
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是唯一的,你可以通过元素搜索找到它所在的list1 / 2/3,但对于像8这样的数字,会有两个答案(list2和list3)。另外,如我的第一个代码示例所示,无法知道数字对应的LOL项目是:list3 [0] LOL [0] [2]还是LOL [2] [0]?没有办法知道。
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]
然后,如果你正在寻找与e具有相同数字但是是不同对象的c,你会这样做
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)
答案 2 :(得分:0)
if 1 in some_list:
...
至于如何检查不同的变量,请不要。把它们放在一个列表或字典中。
答案 3 :(得分:0)
val = 1
for i, lst in enumerate(LOL):
if val in lst:
print(i, lst.index(val))
将打印“1,1”。
答案 4 :(得分:0)
这里似乎混淆了“索引”的使用。我会捅它。这将返回子列表的名称和子列表中的索引。我认为其他人已经展示了如何在原始LOL中找到索引。
LOL = [
[4, 5, 6],
[7, 1, 8],
[6, 2, 9],
]
#store the sublists in a dictionary
checkLists = {
'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]]
}
#the value you are looking for
checkVal = 1
#recursive function to search for a value in a list of lists
def containsValue(val,items):
for item in items:
if isinstance(item,(list,tuple)):
if find(val,item):
return True
else:
print item
if item == val:
return True
return False
#Now check to see if and where the checkVal exists in the sublists
if containsValue(checkVal, LOL):
#search each sublist for the checkVal
for k,v in checkLists.items():
#see if the value is in the sublist
if checkVal in v:
#return the sublist key and index where we found the value
i = v.index(checkVal)
return (k,i)
答案 5 :(得分:0)
也许这就是你想要的:
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]]
def sublist_index_of_li_in_which_is_x(li,x):
return (i for i,sublist in enumerate(li) if x in sublist).next()
print sublist_index_of_li_in_which_is_x(LOL,1)
print sublist_index_of_li_in_which_is_x(LOL,9)
返回
1
2
可能。
顺便说一下,list1,list2,list3在这里玩什么?
def rowcol_tuples_locating_x_in_li(li,x):
return [(i,sublist.index(x)) for i,sublist in enumerate(li) if x in sublist]
print rowcol_tuples_locating_x_in_li(LOL,1)
print rowcol_tuples_locating_x_in_li(LOL,6)
结果
[(1, 1)]
[(0, 2), (2, 0)]