我在苦苦挣扎。我搜索了这个论坛和谷歌,但找不到我能理解的简单答案。
我有一个嵌套列表“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]]
答案 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)]