-2

我需要一段代码,可以减少列表中包含的一个或多个列表的元素。这是一个排序列表。减少必须继续,直到某个参数大于零。我看到了两种可能的情况,但我想不出适用于这两种情况的解决方案。我很难为这个问题制定一个合乎逻辑的陈述,如果需要,我会尝试提供更多细节。谢谢!

#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参数变为5 - 1,继续,取第二个列表的第二个元素将它减少1,参数变为3,继续直到参数为0(首先设想)

4

3 回答 3

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)
于 2012-10-27T05:12:32.950 回答
1

Scenario-1两者Scenario-2都是不同的情况。我找不到任何通用逻辑来为其构建公式。

于 2012-10-27T06:28:12.463 回答
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)。

于 2012-10-27T06:47:32.317 回答