微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

我想要的例子:

symmetrical_sum([10,11,12,12]) == ([11,11],34)
symmetrical_sum([9,99,88,8,77,7,10,100]) == ([88,88],353)
symmetrical_sum([10,5,9,15]) == ([8,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,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])

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。