python - 如何找到python整数列表的对称部分并获得该对称部分的总和?
问题描述
代码的作用:将整数的 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])
我希望这有帮助。当没有检测到对称性时,我真的不明白你会做什么。输出将返回所有对称列表及其总和,包括是否没有对称但元素个数为奇数。不确定这是否是做你想做的事情的最佳方式。
推荐阅读
- javascript - Flickr API 专辑名称和照片 jQuery
- c# - 如何将设备管理器设备属性获取到文本框?
- javascript - CSS如何强制一个新的div低于前一个,因为宽度不适合
- angular - 在带有角度的离子打字稿中获取警报控制器中的输入值
- r - 用另一个向量中的一个替换每个值 - dplyr
- android - 在 Android WebView 中使用 OAuth 进行社交登录
- android - Firebase 云消息传递通知 remoteMessage.data 为空
- ios - 如何为 UIView 关键帧动画设置动画曲线(`func UIView.animateKeyframes()`)
- php - Laravel 注册密码验证
- flutter - 主题 TextField 工具栏选项