Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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_Integer_Symmetry - Fatal编程技术网

如何找到python整数列表的对称部分并获得对称部分的和?

如何找到python整数列表的对称部分并获得对称部分的和?,python,list,integer,symmetry,Python,List,Integer,Symmetry,代码的作用:将Python整数列表作为输入,并搜索列表的“对称”内部部分 我想要的示例: symmetrical_sum([10,11,12,11,12]) == ([11, 12, 11], 34) symmetrical_sum([9,99,88,8,77,7,77,8,88,10,100]) == ([88, 8, 77, 7, 77, 8, 88], 353) symmetrical_sum([10,8,7,5,9,8,15]) == ([8, 7, 5, 9, 8], 37) 如果

代码的作用:将Python整数列表作为输入,并搜索列表的“对称”内部部分

我想要的示例:

symmetrical_sum([10,11,12,11,12]) == ([11, 12, 11], 34)
symmetrical_sum([9,99,88,8,77,7,77,8,88,10,100]) == ([88, 8, 77, 7, 77, 8, 88], 353)
symmetrical_sum([10,8,7,5,9,8,15]) == ([8, 7, 5, 9, 8], 37) 
如果从列表开始的第i个元素的值等于从列表结束的第i个元素的值,则对称发生

我的代码:

def symmetrical_sum(a):

#extract duplicate value
    dupe = [x for n, x in enumerate(a) if x in a[:n]] 

#if no duplicate values found, do the following:
    if dupe == []:
        middle = float(len(a))/2
    if middle % 2 != 0:
        sym = a[int(middle - .5):int(middle + .5)]
        ans = a[int(middle - .5)]
        tuple1 = (sym,ans)
    elif middle % 2 == 0:
        sym = a[int(middle - 1):int(middle + 1)]
        ans = sum(a[int(middle - 1):int(middle + 1)])//2
        tuple1 = (sym,ans)

    return tuple1

else:
    d_to_i = int("".join(map(str, dupe))) #convert duplicate value to integer
    p1 = a.index(d_to_i) #get index of first duplicate
    p2 = a.index(d_to_i, p1+1) #get index of second duplicate
    sym = a[p1:p2+1] #[symmetrical-portion]
    ans = sum(sym) #sum-of-symmetrical-portion
    tuple2 = (sym, ans)

return tuple2
我的代码可以工作,但如果有人能发布一个更简短的解决方案来提高效率,那就太好了

x = [10,11,12,11,12]
output = [(x[n:-n],sum(x[n:-n])) for n in range(len(x))  if x[n] == x[-n-1]]
#this will output 3 cases: Symmetry regardless of even/odd elements. OR no symmetry for odd. (middle index)

if output == []:#even number of elements with no symmetry at all
     pass

if len(output[0][0]) == 1: #odd number of elements with no symmetry at all
    pass
print(output[0])

我希望这有帮助。我真的不明白当检测不到对称性时你会怎么做。输出将返回所有对称列表及其总和,包括是否没有对称,但元素数为奇数。不太确定这是否是实现所需目标的最佳方式。

列表是否仅因为镜像了一个值而对称?如果存在更多“对称”子列表,您希望发生什么?您希望获得最大可能的和链或最大值,还是获得所有对称和?因为理论上你可以在一些整数列表中得到很多对称和。我认为列表理解或递归算法会有帮助。@JasonChia我只想有一个整数列表,然后得到该列表的对称列表和对称列表的和。如果它可以是一行代码就好了,因为我不是专家,所以我的代码非常简单long@joostblack看看我添加的示例,你就会知道我在寻找什么:)