如何设置条件以确定是否选择了列表中的第二项或第一项



我有这些点

[(3, 4), (3, 6), (3, 8), (4, 5), (4, 7), (5, 1), (5, 5), (7, 3), (7, 5), (8, 5)]

我对它们进行了一些操作,最终得到了这份列表

[(6.0, 3.605551275463989), (6.324555320336759, 5.385164807134504), (7.211102550927978, 7.280109889280518), (5.0990195135927845, 5.0), (5.830951894845301, 6.708203932499369), (5.0, 4.0), (4.123105625617661, 5.656854249492381), (2.23606797749979, 6.324555320336759), (2.23606797749979, 7.211102550927978), (1.4142135623730951, 8.06225774829855)]

列表中的第一个项目(例如(6.0, 3.605551275463989)(对应于第一个点(例如(3,4(。我在列表的第一个项目中找到了两个项目之间的最小值,并得出了这个:

[3.605551275463989, 5.385164807134504, 7.211102550927978, 5.0, 5.830951894845301, 4.0, 4.123105625617661, 2.23606797749979, 2.23606797749979, 1.4142135623730951]

我现在想做的是,例如,如果最小值是第二项,就像在第一种情况下一样,我想把它写如下:(3,4) M2,M2,这意味着它是第二个项。我该怎么做?我甚至不知道从哪里开始解决这个问题,因为我还没有遇到过类似的事情。

使用zip()并行循环所有3个列表。然后,只需将第二个列表中项目的选择值与第三个列表中的相应值进行比较,就可以知道是打印M1还是打印M2

l1 = [(3, 4), (3, 6), (3, 8), (4, 5), (4, 7), (5, 1), (5, 5), (7, 3), (7, 5), (8, 5)]
l2 = [(6.0, 3.605551275463989), (6.324555320336759, 5.385164807134504), (7.211102550927978, 7.280109889280518), (5.0990195135927845, 5.0), (5.830951894845301, 6.708203932499369), (5.0, 4.0), (4.123105625617661, 5.656854249492381), (2.23606797749979, 6.324555320336759), (2.23606797749979, 7.211102550927978), (1.4142135623730951, 8.06225774829855)]
l3 = [3.605551275463989, 5.385164807134504, 7.211102550927978, 5.0, 5.830951894845301, 4.0, 4.123105625617661, 2.23606797749979, 2.23606797749979, 1.4142135623730951]
for i1, (m1, m2), selected in zip(l1, l2, l3):
if selected == m1:
which = "M1"
else:
which = "M2"
print(i1, which)

你的意思是这样的吗?

points = [(3, 4), (3, 6), (3, 8), (4, 5),
(4, 7), (5, 1), (5, 5), (7, 3), (7, 5), (8, 5)]
results = [(6.0, 3.605551275463989), (6.324555320336759, 5.385164807134504), (7.211102550927978, 7.280109889280518), (5.0990195135927845, 5.0), (5.830951894845301, 6.708203932499369), (5.0, 4.0), (4.123105625617661, 5.656854249492381), (2.23606797749979, 6.324555320336759),
(2.23606797749979, 7.211102550927978), (1.4142135623730951, 8.06225774829855)]
assert(len(points) == len(results))
for i, r in enumerate(results):
if r[1] < r[0]:
num = 2
else:
num = 1
print(f'{points[i]}, M{num}')

这个怎么样

lst1 = [(3, 4), (3, 6), (3, 8), (4, 5), (4, 7), (5, 1), (5, 5), (7, 3), (7, 5), (8, 5)]
lst2 = [(6.0, 3.605551275463989), (6.324555320336759, 5.385164807134504), (7.211102550927978, 7.280109889280518), (5.0990195135927845, 5.0), (5.830951894845301, 6.708203932499369), (5.0, 4.0), (4.123105625617661, 5.656854249492381), (2.23606797749979, 6.324555320336759), (2.23606797749979, 7.211102550927978), (1.4142135623730951, 8.06225774829855)]
for i, pt in enumerate(lst2):
argmin = pt.index(min(pt))
print(lst1[i], 'M{}'.format(argmin + 1))

输出:

(3, 4) M2
(3, 6) M2
(3, 8) M1
(4, 5) M2
(4, 7) M1
(5, 1) M2
(5, 5) M1
(7, 3) M1
(7, 5) M1
(8, 5) M1
a = [(6.0, 3.605551275463989), (6.324555320336759, 5.385164807134504), (7.211102550927978, 7.280109889280518), (5.0990195135927845, 5.0), (5.830951894845301, 6.708203932499369), (5.0, 4.0), (4.123105625617661, 5.656854249492381), (2.23606797749979, 6.324555320336759), (2.23606797749979, 7.211102550927978), (1.4142135623730951, 8.06225774829855)]
b = [(3, 4), (3, 6), (3, 8), (4, 5), (4, 7), (5, 1), (5, 5), (7, 3), (7, 5), (8, 5)]
for i in range(len(a)):
j = list(a[i])
print(f'{b[i]}-->{max(j)},M{j.index(max(j))+1}')

我将每个元组转换为列表,并使用列表方法。。。

输出

(3, 4)-->6.0,M1
(3, 6)-->6.324555320336759,M1
(3, 8)-->7.280109889280518,M2
(4, 5)-->5.0990195135927845,M1
(4, 7)-->6.708203932499369,M2
(5, 1)-->5.0,M1
(5, 5)-->5.656854249492381,M2
(7, 3)-->6.324555320336759,M2
(7, 5)-->7.211102550927978,M2
(8, 5)-->8.06225774829855,M2

最新更新