繁体   English   中英

如何确定是否选择了列表中的第 2 项或第 1 项?

[英]How do I make a condition to find out if the 2nd or 1st item in a list was selected?

我有这几点

[(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]

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

你的意思是这样的?

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}')

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}')

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

Output

(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

使用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)

这个怎么样

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))

Output:

(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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM