鉴于l = [[1,2,3],[3,4,5],[5,6]],有一种方法可以返回一个列表,该列表包含l中所有3的位置;即返回[2,3]。我编写的示例代码是:
def pos_in_lists(seq, elem):
while i < len(seq):
elem_pos = seq[i].index(elem)
return [elem_pos]
运行此命令时,它仅返回2,这不是我想要的结果。我怎么了另外,有没有更简单的方法来解决我的问题?
答案 0 :(得分:0)
您需要在每个循环中增加“ i”
“返回”强制循环退出。那应该在代码末尾的循环之外。
答案 1 :(得分:0)
您的代码仅返回一个包含一个元素(return [elem_pos]
)的列表。您需要在循环外部添加一个列表变量(result
),以通过附加到该列表来跟踪先前列表的结果。
def pos_in_lists(seq, elem):
result = []
i = 0
while i < len(seq):
if elem in seq[i]:
elem_pos = seq[i].index(elem)
result.append(elem_pos)
i += 1
return result
另一个更简单的选择是使用列表理解
def pos_in_lists(seq, elem):
return [l.index(elem) for l in seq if elem in l]
答案 2 :(得分:0)
根据我对问题的理解,给定列表l = [[1,2,3],[3,4,5],[5,6]],如果我们必须找到3,则输出列表应是[2,0]。
提供的代码中存在以下错误:
seq [i] .index(elem)如果列表中没有3,将抛出值错误。
解决方案
def pos_in_lists(seq,elem):
res = []
for innerList in seq:
if elem in innerList:
res.append(innerList.index(elem))
return res
pos_in_lists(l,3)
结果为[2,0]
我们也可以使用列表理解:
def pos_in_lists(seq, elem):
return [innerList.index(elem) for innerList in seq if elem in innerList]