我需要一段代码来减少列表中包含的一个或多个列表的元素。这是一个排序列表。减少必须继续,直到某个参数大于零。我看到两种可能的情况,我无法找出适用于两者的解决方案。我很难为问题制定逻辑上合理的声明,如果需要,会尝试提供更多细节。谢谢!
#Scenario 1
parameter = 5
data = [[1.99,1],[1.98,1],[1.97,2],[1.96,6]]
#reduction code
data = [[1.99,0],[1.98,0],[1.97,0],[1.96,5]]
#Scenario 2
parameter = 0.5
data = [[1.99,1],[1.98,1],[1.97,2],[1.96,6]]
#reduction code
data = [[1.99,0.5],[1.98,1],[1.97,2],[1.96,6]]
程序的流程是这个...... 取第1列表的第2个元素减1由1个参数变为5 - 1,继续,取第2个列表的第2个减1,参数变为3,继续到参数为0(第一个场景)
答案 0 :(得分:1)
我不明白为什么第二种情况有[1.99,0.5]对显示....,但是
data_reduced = []
for pair in data:
if pair[1] < parameter:
pair[1] = 0
else :
pair[1] = parameter
data_reduced.append(pair)
答案 1 :(得分:1)
Scenario-1
和Scenario-2
两种情况都不同。我找不到任何建立公式的常用逻辑。
答案 2 :(得分:0)
对于第一种情况:
parameter = 3
data = [[1.99,1],[1.98,1],[1.97,2],[1.96,6]]
# copy of data list
data_reduced = data[:]
for n,l in enumerate(data_reduced):
if parameter <= 0:
break
else:
l[1] = l[1] - 1
parameter -= 1
print data_reduced
数据列表只有4个元素,你没有描述如果列表比你的例子中的参数计数器短(参数= 5,但列表中只有4个元素)会发生什么,所以我减少了参数到3.
第二种情况完全不同,因为只减少了第一个列表的第二个元素(而不是1)。