2017-05-27 70 views
-1

我有一个列表的列表条件根据列表中的重复元素

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') 

这不是给我如何过正确的输出,如何更改每当我encoun的“无”值设置为“新城”又'1996'。

感谢您的帮助

+0

@Moinuddin Quadri虽然1996年没有遇到第二次2,3位仍然是区域和无,当遇到下一次我需要第三个元素从无更改为地铁,并继续作为直到1996年再次遇到 – StarLord

回答

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') 
2

你应该创建一个临时list(或set),以保持其中添加了多年的轨道,并设置了“无”和“地铁”因此:

  • 如果今年是中列表中,设置“地铁”
  • 如果今年不在列表中,增加一年到列表中,并设置为“无”

因此你的代码应该是这样的:

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

这个追加所有其他条目的地铁,每次我遇到1996年地铁也都需要从地铁列表中相应地更改。 – StarLord

+0

@ArnabSharma根据你在被问及的问题中提到的问题,“这个问题不是正确的行为吗?”如果我再次遇到'1996',我该如何将'None'值更改为'Metro'。也没有提到'metro'列表。我看到的只是这里提到的“Metro”字符串。 –

+0

@ArnabSharma如果你想得到不同的结果,那么你在这里提到的,请打开一个新的问题,但我试图首先自己实现它。它会帮助你学习新东西 –