【发布时间】:2020-06-12 07:36:46
【问题描述】:
我有 4 个价格清单和 1 个偏差清单,总共包含 30 个价格,这些价格分为 5 个块,每块 6 个元素。它们最初只是简单地出现在列表中。
price1 =[2, 1, 22, 2, 23, 2, 5, 21, 21, 27, 2, 22, 55, 2, 8, 2, 3, 3, 3, 13, 23, 77, 22, 23, 2, 6, 7, 9, 2, 2]
price2 =[2, 12, 72, 22, 13, 22, 65, 61, 23, 25, 2, 2, 51, 2, 8, 2, 3, 3, 3, 13, 23, 77, 22, 23, 2, 6, 7, 9, 2, 21]
price3 =[21, 52, 72, 22, 93, 32, 85, 61, 23, 25, 2, 2, 51, 2, 8, 2, 3, 31, 3, 13, 53, 67, 23, 83, 2, 16, 74, 19, 2, 11]
price4 =[27, 12, 82, 12, 23, 32, 35, 41, 27, 25, 21, 2, 51, 21, 18, 22, 3, 21, 31, 33, 13, 67, 23, 83, 21, 26, 74, 29, 23, 51]
Deviation =[-17, -2, -2, 52, 13, -32, -15, 71, 27, 25, -221, 21, -151, -21, 128, -22, 312, 212, -31, -533, 13, -227, -123, 183, 21, 26, 74, -129, -23, -21]
现在我将这些价格表分成 5 个块,每块 6 个元素,然后,我从列表的每个块中获取前 3 个最高价格。我的做法:
n = 6
a = [price1[i:i + n] for i in range(0, len(price1), n)]
b = [price2[i:i + n] for i in range(0, len(price2), n)]
c = [price3[i:i + n] for i in range(0, len(price3), n)]
d = [price4[i:i + n] for i in range(0, len(price4), n)]
newPrice1 = [sorted(block, reverse=True)[:3] for block in a]
newPrice2 = [sorted(block, reverse=True)[:3] for block in b]
newPrice3 = [sorted(block, reverse=True)[:3] for block in c]
newPrice4 = [sorted(block, reverse=True)[:3] for block in d]
print("Top 3 Highest Prices in list 1:", newPrice1)
print("Top 3 Highest Prices in list 2:", newPrice2)
print("Top 3 Highest Prices in list 3:", newPrice3)
print("Top 3 Highest Prices in list 4:", newPrice4)
print("Max among all the prices: ", max(newPrice1, newPrice2, newPrice3, newPrice4))
输出:
5 blocks division of price1: [[2, 1, 22, 2, 23, 2], [5, 21, 21, 27, 2, 22], [55, 2, 8, 2, 3, 3], [3, 13, 23, 77, 22, 23], [2, 6, 7, 9, 2, 2]]
5 blocks division of price2: [[2, 12, 72, 22, 13, 22], [65, 61, 23, 25, 2, 2], [51, 2, 8, 2, 3, 3], [3, 13, 23, 77, 22, 23], [2, 6, 7, 9, 2, 21]]
5 blocks division of price3: [[21, 52, 72, 22, 93, 32], [85, 61, 23, 25, 2, 2], [51, 2, 8, 2, 3, 31], [3, 13, 53, 67, 23, 83], [2, 16, 74, 19, 2, 11]]
5 blocks division of price4: [[27, 12, 82, 12, 23, 32], [35, 41, 27, 25, 21, 2], [51, 21, 18, 22, 3, 21], [31, 33, 13, 67, 23, 83], [21, 26, 74, 29, 23, 51]]
Top 3 Highest Prices in list 1: [[23, 22, 2], [27, 22, 21], [55, 8, 3], [77, 23, 23], [9, 7, 6]]
Top 3 Highest Prices in list 2: [[72, 22, 22], [65, 61, 25], [51, 8, 3], [77, 23, 23], [21, 9, 7]]
Top 3 Highest Prices in list 3: [[93, 72, 52], [85, 61, 25], [51, 31, 8], [83, 67, 53], [74, 19, 16]]
Top 3 Highest Prices in list 4: [[82, 32, 27], [41, 35, 27], [51, 22, 21], [83, 67, 33], [74, 51, 29]]
Max among all the prices: [[93, 72, 52], [85, 61, 25], [51, 31, 8], [83, 67, 53], [74, 19, 16]]
#There is some mistake in getting the max value also because in the second block, there should be 27 instead of 25,
#similarly, it should be 21 instead 0f 8, 29 instead of 16 in 5th block.
现在你可以看到第一个最大元素是 93,它在 price3 列表中,最初它在第 4 位,所以应该在 deviation 列表中搜索第 4 位,这个位置的元素是 13。类似地, 72 在 price2 和 price3 两者中,所以它可以返回任何位置,没有限制,所以假设它占据了 price2 位置,它最初在第 2 位置。所以第二个偏差位置的元素是-2,依此类推。
我想要的输出:
Deviation = [[13,-2,-2], [-15,71,25], [-151,212,128], [183,-227,13], [74,-129, 26]]
我只想要价格列表中那些最大元素的位置。
【问题讨论】:
标签: python python-3.x list indexing