如何减去列表中的元组?

时间:2018-12-28 17:55:41

标签: python math

假设我有一个包含元组的列表。

类似这样的东西:

import tkinter as tk


def open_window():
    list_of_tops.append(tk.Toplevel(root))
    list_of_tops[-1].geometry("100x100")


def destroy_all():
    for top_window in list_of_tops:
        top_window.destroy()

root = tk.Tk()
root.geometry("500x500")
list_of_tops = [] # list to store any toplevel window.
tk.Button(root, text="open", command=open_window).pack(side=tk.TOP)
tk.Button(root, text="destroy all", command=destroy_all).pack(side=tk.BOTTOM)
root.mainloop()

有没有一种方法可以减去元组中的内容并将listnum变成:

listnum = [(18,12),(12,20)]

如您所见,它采用元组中最大的数字,然后将其相减。

4 个答案:

答案 0 :(得分:3)

使用列表理解:-

>>> listnum = [(18,12),(12,20)]
>>> [(i-j) for i,j in listnum]
[6, -8]
>>> listnum = [(18,12),(12,20),(32,54),(2,43)]
>>> [(i-j) for i,j in listnum]
[6, -8, -22, -41]

并且您要求提供bigger number - smaller;使用abs()进行计算。

>>> listnum = [(18,12),(12,20),(32,54),(2,43)]
>>> [abs(i-j) for i ,j in listnum]
[6, 8, 22, 41]

答案 1 :(得分:2)

只需列表理解即可。

listnum = [(18,12),(12,20)]
listnum = [x[0] - x[1] for x in listnum]
# [6, -8]

编辑:要从较小的数字中减去较大的数字,可以改为执行类似的操作。

listnum = [max(x[0],x[1]) - min(x[0], x[1]) for x in listnum]
# [6, 8]

或者您可以对此更加厚脸皮

listnum = [abs(x[0] - x[1]) for x in listnum]
# [6, 8]

答案 2 :(得分:0)

您可以使用map函数按照以下步骤进行操作:

listnum = [(18,12),(12,20)]
listnum = list(map(lambda x: abs(x[0]-x[1]),listnum))
print(listnum)

结果:

[6, 8]

答案 3 :(得分:0)

您可以遍历列表并将每个答案附加到新列表中,然后输出列表。

代码

y=[]
listnum = [(18,12),(12,20)]
for a,b in listnum:
    x=abs(a-b)
    y.append(x)
print (y)

输出

[6, -8]