编辑项目并将其附加到嵌套列表 - Python 2.7

时间:2014-07-10 16:43:48

标签: list python-2.7 nested list-comprehension

我在苦苦挣扎。我搜索了这个论坛和谷歌,但找不到我能理解的简单答案。

我有一个嵌套列表“plot”,它将有数百个子列表全部采用此示例的格式:

plot = [['A',21.09],['A',10.00],['A',20.99],['B',58.50],['B',17.69]]

我需要更改子列表中的项目并将它们存储在新列表“plotlists”中。这些是我需要做出的改变:

[?] [0](所有第一个子列表项)如果它们是'A'则变为0如果它们是'B'变为1 [?] [1](第2项)没有变化 [?] [2](第3项 - 新项目)如果[?] [0]为'A'则此项目= -1否则为[?] [1] * 1.2

我已经尝试了很多方法来实现这一目标,但我能得到的最好的是一堆混乱的代码,产生了3个新的列表,即

这是一个最小的样本:

plot = [['A', 21.09], ['A', 10.00], ['A', 20.99], ['B', 58.50], ['B', 17.69]]
plot0 = []
plot1 = []
plot2 = []
for i in plot:
    plot0.append(i[0])
    plot1.append(i[1])

for i in plot0:
    if i == 'A':
        plot0.append(0)
    elif 1 == 'B':
        plot0.append(1)

for i in plot0:
    if i == 'A':
        plot2.append(-1)
    elif i == 'B':
        plot2.append(1.2)

结果:

plot0 = [0, 0, 0, 1, 1]
plot1 = [21.09, 10.00, 29.99, 58.50, 17.69]
plot2 = [-1, -1, -1, 1.2, 1.2]

请任何人都可以告诉我将其写为列表理解,产生如下结果:

plotlists = [[0, 21.09, -1][0, 10.00, -1][0, 29.99, -1][1, 58.50, 70.56][1, 17.69, 21.23]]

1 个答案:

答案 0 :(得分:1)

这是一个相当长的列表理解,但它会起作用:

new_list = [[0 if sublist[0] is 'A' else 1, sublist[1], -1 if sublist[0] is 'A' else 1.2*sublist[1]] for sublist in plot]

更新:自动递增计数器

new_list = [[i, 0 if sublist[0] is 'A' else 1, sublist[1], -1 if sublist[0] is 'A' else 1.2*sublist[1]] for i, sublist in zip(xrange(0, len(plot)), plot)]