这就是问题:
“编写一个函数, find_all(L,i),它采用嵌套列表 L 和项目 i 并打印 L 中 i 所有出现的索引。
什么:
from string import *
def find_all(L,i):
for sub_list in L:
if i in sub_list:
return (L.index(sub_list), sub_list.index(i))
print find_all([[1,2,3],[4,5],[6],[5,13]], 5)
输出仅为(1,1)。
答案 0 :(得分:1)
ll = [[1,2,3],[4,5],[6],[5,13]]
def find_all(ll,num):
for index_inner,inner_list in enumerate(ll):
for index,item in enumerate(inner_list):
if item == num:
print('List :',inner_list,'List Index :',index_inner, 'Index :' ,index)
find_all(ll,5)
RESULT
List : [4, 5] List Index : 1 Index : 1
List : [5, 13] List Index : 3 Index : 0
答案 1 :(得分:0)
您应该使用yield
而不是返回。 Yield返回一个生成器表达式,然后可以将其转换为list
。
def find_all(L,i):
for sub_list in L:
if i in sub_list:
yield (L.index(sub_list), sub_list.index(i))
print list(find_all([[1,2,3],[4,5],[6],[5,13]], 5))
或者,如果要在默认情况下返回列表,请定义临时返回列表。
def find_all(L,i):
returnLi = []
for sub_list in L:
if i in sub_list:
returnLi.append((L.index(sub_list), sub_list.index(i)))
return returnLi
print find_all([[1,2,3],[4,5],[6],[5,13]], 5)
最后,如果您不需要列表或不想使用收益率,您只需打印出结果即可:
def find_all(L,i):
for sub_list in L:
if i in sub_list:
print((L.index(sub_list), sub_list.index(i)))
find_all([[1,2,3],[4,5],[6],[5,13]], 5)
答案 2 :(得分:0)
由于你正在使用return,它会在找到第一个结果而不是继续之后终止程序,所以这样做:
def find_all(mylist, char):
for sub_list in mylist:
if char in sub_list:
print ("({},{})".format(mylist.index(sub_list),sub_list.index(char)))
find_all([[1,2,3],[4,5],[6],[5,13]], 5)
输出:
(1 ,1)
(3, 0)
答案 3 :(得分:0)
当if i in sub_list:
满足时,你循环中的返回函数立即退出循环。
要打印所有这些,只需创建一个临时变量作为列表来存储数据,如下所示:
from string import *
temp = []
def find_all(L,i):
for sub_list in L:
if i in sub_list:
temp.append([L.index(sub_list), sub_list.index(i)])
return temp