条件基于列表中的重复元素

时间:2017-05-27 12:51:45

标签: python list

我有一份清单

my_list = [['1996', 0.23, 0.56], ['1997', 0.45, 0.32], ['1996', 0.15, 0.34],['1997', 0.34, 0.13]]

我需要将其写为文本文件,使其看起来像

1996|Area|None|0.23|0.56

1997|Area|None|0.45|0.32

1996|Area|Metro|0.15|0.34

1997|Area|Metro|0.34|0.13

我写了以下代码

for data in my_list:
    data.insert(1, Area)
    data.insert(2, None)
    file.write("|".join(map(str, data)) + '\n')

然而,这并没有给我正确的输出,我如何更改“无”#39;价值#34; Metro"每当我遇到' 1996'试。

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

您应该创建一个临时 scala.reflect.internal.FatalError: class StringContext does not have a member f [info] at scala.reflect.internal.Definitions$DefinitionsClass.fatalMissingSymbol(Definitions.scala:1236) [info] at scala.reflect.internal.Definitions$DefinitionsClass.$anonfun$getMember$1(Definitions.scala:1259) [info] at scala.reflect.internal.Definitions$DefinitionsClass.getMember(Definitions.scala:1254) [info] at scala.reflect.internal.Definitions$DefinitionsClass.getMemberMethod(Definitions.scala:1288) [info] at scala.reflect.internal.Definitions$DefinitionsClass$RunDefinitions.StringContext_f$lzycompute(Definitions.scala:1477) [info] at scala.reflect.internal.Definitions$DefinitionsClass$RunDefinitions.StringContext_f(Definitions.scala:1477) [info] at scala.tools.reflect.FastTrack.$anonfun$fastTrackCache$1(FastTrack.scala:53) [info] at scala.reflect.internal.SymbolTable$perRunCaches$$anon$1.apply(SymbolTable.scala:395) [info] at scala.tools.reflect.FastTrack.contains(FastTrack.scala:20) [info] at scala.tools.nsc.typechecker.Namers$Namer.methodSig(Namers.scala:1388) (或list)来跟踪添加的年份,并相应地设置“无”和“地铁”:

  • 如果年份在列表中,请设置“Metro”
  • 如果年份不在列表中,请在列表中添加年份并设置“无”

因此,您的代码应该是:

set

答案 1 :(得分:1)

使用一套,这样您就可以知道数据中已存在哪些年份。

year_set = set()

for data in my_list:
    data.insert(1, Area)
    if data[0] in year_set:
        data.insert(2, 'Metro')
    else:
        data.insert(2, None)
        year_set.add(data[0])
    file.write("|".join(map(str, data)) + '\n')