我试图为x和y中常见的元素打印一个索引列表,因此在下面的示例中,[5,6,8,9,11]
在每个元素中都是常见的,因此我希望输出是公共元素的索引列表,因此在本例中是[0,1,3,4,6]
。我尝试了下面的代码,但我只得到了一个空的列表[]
作为我的输出,我不知道从这里去哪里。任何帮助都将不胜感激。
x= [5,6,7,8,9,10,11,12]
y=[5,6,8,9,11]
y=[]
for i in range(0,len(x)):
if x[i] in y:
y.append(i)
print(y)
发布于 2021-06-24 04:29:00
首先-你是在凌驾y
。所以你把x
和[]
做比较。
此外,您正在进行更新y
,同时将其与循环中的它进行比较。如果我见过的话就容易出错..。
接下来,为什么不使用一个简单的清单-理解?
indices_of_stuff_in_x_thats_also_in_y = [i for i, x_ in enumerate(x) if x_ in y]
print(indices_of_stuff_in_x_thats_also_in_y)
# [0, 1, 3, 4, 6]
最后一点--请注意,您最初的定义听起来有点对称(“x和y中常见元素的索引列表”)。但它不是也不可能因为你说的是指数..。
发布于 2021-06-24 04:38:42
您可以使用enumerate
函数来获取公共元素的索引。
您可以使用.index()
,但这可能会导致问题,因为它获取提供的元素的第一个外观的索引。
这是一个有效的代码。
list1 = [5,6,7,8,9,10,11,12]
list2 = [5,6,8,9,11]
list3=[j for j,i in enumerate(list1) if i in list2]
print(list3)
发布于 2021-06-24 04:46:04
你必须用装饰器。这是Pythonic,您必须尽可能编写Pythonic代码:
import math
import operator
import functools
def filter(func):
def _(f):
@functools.wraps(f)
def _(args):
return f.__call__(list.__call__(__builtins__.filter.__call__(func, args)))
return _
return _
def transform(func):
def _(f):
@functools.wraps(f)
def _(args):
return f.__call__(func.__call__(args))
return _
return _
def map(func):
def _(f):
@functools.wraps(f)
def _(args):
return f.__call__(list.__call__(__builtins__.map.__call__(func, args)))
return _
return _
y = [5, 6, 8, 9, 11]
@transform(enumerate)
@filter(lambda v: y.__contains__(operator.itemgetter(int(round(math.pi.__mul__(pow(int(math.e).__mul__(int(math.pi + math.e)), int(math.pi.__add__(math.e)))), pow(hash(math.inf), next(v for k, v in __builtins__.__dict__.items.__call__() if k.__eq__(y.__class__.__name__)).__call__().__len__.__call__()).__neg__())).__sub__(hash(math.inf)))(v)))
@map(operator.itemgetter(hash(math.nan)))
def solve(v):
return v
print(solve([5, 6, 7, 8, 9, 10, 11, 12]))
# Outputs [0, 1, 3, 4, 6]
https://stackoverflow.com/questions/68109627
复制相似问题