Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在发电机内部破裂?_Python_List_Loops_Generator - Fatal编程技术网

Python 如何在发电机内部破裂?

Python 如何在发电机内部破裂?,python,list,loops,generator,Python,List,Loops,Generator,如果条件满足,如何中断一次。 我不想使用另一个for循环,我希望代码简单。 以及如何使结果列表成为单个维度。 现在列表是[[1]、[2]、[3]] 我希望它是[1,2,3]这很简单,您只需将它转换为for循环 事实上,你不想要一个for循环,这是你必须要处理的事情 def permutationEquation(p): result=[] for i in range(1,len(p)+1): result.append(list(

如果条件满足,如何中断一次。 我不想使用另一个for循环,我希望代码简单。 以及如何使结果列表成为单个维度。 现在列表是[[1]、[2]、[3]]
我希望它是[1,2,3]

这很简单,您只需将它转换为
for
循环

事实上,你不想要一个for循环,这是你必须要处理的事情

    def permutationEquation(p):
        result=[]
        for i in range(1,len(p)+1):
            result.append(list(y+1 for y,v in enumerate(p) if(p[v-1]==i)))

如果输入
p
是一个置换,那么您的函数计算的是
p
到-2的幂,或者置换的倒数的平方。这可以用线性时间计算(排列大小是线性的),而代码使用二次时间

我还建议在排列中使用数字0,1,…,n-1,因为这与Python基于0的索引相结合会更好。当使用这些简单的数字时,这里有一个简单的函数来解决您的问题:

def permutationEquation(p):
    result = []
    for i in range(1, len(p)+1):
        for y, v in enumerate(p):
            if p[v-1] != i:
                break
            result.append(y + 1)

发电机是不可能停下来的。你只能停止使用它(这是一个巨大的提示,应该让你用谷歌搜索一下)。发布你的输入
p
value你只需使用
next()
而不是
list()
,你就会得到想要的结果。也许
result.extend(y+1代表y,v在枚举(p)中如果(p[v-1]==i))
。这将
append()
更改为
extend()
,并且由于
extend()
接受迭代器,因此它不再调用
list()
。(当然,它仍然效率低下。)您可以让
枚举
从1开始,而不是从0开始;这可能会简化很多关于索引的争论。在我看来,这既满足OP的破坏要求,又不满足列表列表的要求。我试着在hackerank中这样做。我不认为你的解决方案合适。它会导致索引超出范围错误。@ShashiTunga正如我在回答中提到的,你需要将索引调整为零基,因此你需要从读取的每个整数中减去一,然后在打印结果时再加一。
def permutationEquation(p):
    inv = [None] * len(p)
    for i, x in enumerate(p):
        inv[x] = i
    return [inv[x] for x in inv]