2017-08-02 186 views
-4

我正在學習python,並嘗試使用web.py創建一個自己使用的電影集合。蟒蛇 - 比較兩個列表

我有兩個列表

movies_all = ["abc","xyz","opq"] 
movies_watched = ["xyz","pqr","cba"] 

我想要做的是打印最終輸出movies_all的所有行。 這樣,如果在列表movies_watched中存在匹配,則輸出是或否。例如,在上面只有「xyz」是常見的。

優選地,輸出應該是單個數據類型,例如「列表列表」或字典或元組列表等。 其目的是在如下所示的html表格中顯示輸出。

輸出:

 
================ 
Movies| Watched | 
------|---------| 
abc |No  | 
xyz |Yes  | 
opq |No  | 

表輸出僅用於提高可讀性,實際上是不需要的。

我都試過,但通過迭代一個列表

matches=[] 
print "start comparing" 
for item_a in movies_all: 
    for item_b in movies_watched: 
     if item_a == item_b: 
      matches.append(item_a) 
      matches.append("Yes") 
      #result=zip(movies_all,matches) -> Tried this but not getting desired output 

for i in range(4): 
    print("%s, %s" % (movies_all[i],matches)) 
+10

你應該發佈自己的編碼嘗試,否則你的問題會吸引downvotes。提示:要有效地做到這一點,'movies_watched'應該是'set'。 –

+0

使用某人發佈的答案,然後執行:將pandas導入爲pd,d = {'movies':movies},df = pd.DataFrame(data = d) – sera

+0

@ PM2Ring感謝您通知我,我的第一篇文章中添加了我的代碼失敗 – Bharat

回答

1

不能夠輸出期望的結果與for...in...和比較其他列表與in。通過創建一個空字典併爲每個新密鑰分配一個值來建立你的字典。在你的例子中,你將擁有一個關於movies_all中每個項目的鍵。

movies={} 
for movie in movies_all: 
    if movie in movies_watched: 
     movies[movie] = "yes" 
    else: 
     movies[movie] = "no" 
+0

@Bharat然後做:導入熊貓作爲PD,D = {'看過':電影},DF = pd.DataFrame(數據= D) – sera

+0

@ bennett-brown謝謝你看起來像我是什麼尋找。我能得到movies.iteritems所需的輸出 >>>關鍵,值(): \t打印( 「%s%S」 %(鍵,值)) \t XYZ是 ABC沒有 opq no – Bharat

+0

是否可以保留movies_all的順序,因爲我發現在打印這些值時訂單發生了變化。例如具有較大movies_all列表中的順序不同於原: QWE沒有 XYZ是 ABC沒有 124沒有 OPQ沒有 – Bharat