【发布时间】:2016-06-07 16:27:37
【问题描述】:
在此处输入和说明其说明
a= [( 0.1, 0.2, 0.3), (0.2, 0.8, 0.9, 4.5), ( 0.11, 0.22, 0.33), (0.2, 0.46, 0.475, 1.8, 1.95)]
元组的每个元素代表一个和弦的长度。就像第一个元组由 3 个弦组成,它们代表一个边长分别为 0.1、0.2 和 0.3 的三角形。第二个是矩形,依此类推。在每个元组中,可以有可变数量的元素。就像第一个元组有 3 个元素,第二个有 4 个元素,第三个有 3 个元素,而第四个有 5 个元素。所以它也可以是可变的。
现在任务来了。
在某些元组中,其中一个元素的长度可以是另一个元组元素长度的一半或两倍。在这种情况下,需要输出(夫妇)元组的 ID 而不是它本身的长度。元组的 ID 将有助于识别它是第一个元组,第二个还是另一个。元素的 ID 不仅仅需要元组的 ID。
对于给定的情况,结果将是
1 2 because 0.1 exists in tuple 1 and 0.2 exists in tuple 2
1 4 because 0.1 exists in tuple 1 and 0.2 exists in tuple 4
2 4 because 0.9 exists in tuple 2 and 1.8 exists in tuple 4
请注意
0.1 and 0.2 exist in tuple 1
但它不会输出为 1 1 因为它在同一个元组中。如果同一元组中存在一半或双倍长度,则不应排除这种情况。 是否可以应用长度的 +-5% 的障碍,仅考虑数值和舍入误差?
我刚刚学会了元组的串联使用,所以尝试一下
couples = []
for lengths in a:
for length in lengths:
if [length==i*2 for i in tup) for tup in b)]:
couples.append(length,i)
elif [length==i*0.5 for i in tup) for tup in b)]:
couples.append(length,tup)
但我不知道它是否适合用于比较。
【问题讨论】:
-
对于那些还不清楚的,我自己添加了答案。唯一的一点是,它写的是20行。任何专家都可以像@rrauenza 所做的那样,以更少的行数或至少一个方向提出建议。