如何使用python以递归方式减少列表中包含的一个/多个列表的元素?

时间:2012-10-27 05:03:19

标签: python list recursion

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

#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(第一个场景)

3 个答案:

答案 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-1Scenario-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)。