【问题标题】:python - compare two listspython - 比较两个列表
【发布时间】:2017-08-02 08:02:43
【问题描述】:

我正在学习 python 并尝试使用 web.py 创建一个电影集供我自己使用。

我有两个列表

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

我想要做的是在最终输出中打印所有 movies_all 行。 这样如果movies_watched列表中有匹配项,则输出Yes或No。例如,在上面只有“xyz”是常见的。

最好输出应该是单一数据类型,例如“列表列表”或字典或元组列表等。 其目的是在 html 表格中显示输出,如下所示。

输出:

================= 电影|观看 | ------|----------| abc |没有 | xyz |是的 | opq |否 |

输出中的表格只是为了提高可读性,实际上不是必需的。

我已经尝试过了,但无法输出所需的结果

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

【问题讨论】:

  • 你应该发布你自己的编码尝试,否则你的问题会吸引反对票。提示:要有效地做到这一点,movies_watched 应该是set
  • 使用某人发布的答案然后执行:import pandas as pd, d = {'movies':movies}, df = pd.DataFrame(data=d)
  • @PM2Ring 感谢您的通知,实际上是我的第一篇文章,添加了我失败的代码尝试
  • @Bharat 使用答案和我对答案的评论并完成
  • 另外,您的循环会创建 result,但您不会将它用于任何事情。但是感谢您发布一些代码。您的最终for 循环循环了 4 次,但列表中只有 3 部电影,因此代码将在最后一个循环中以 IndexError 崩溃。

标签: python compare


【解决方案1】:

使用for...in... 遍历一个列表,并使用in 与另一个列表进行比较。通过创建一个空字典并为每个新键分配一个值来构建您的字典。在您的示例中,movies_all 中的每个项目都有一个键。

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

【讨论】:

  • @Bharat 然后做:import pandas as pd, d = {'watched':movies}, df = pd.DataFrame(data=d)
  • @bennett-brown 谢谢,这看起来像我想要的。我能够获得所需的输出 >>> 对于 movies.iteritems() 中的键、值: print ("%s %s" % (key,value)) xyz yes abc no opq no
  • A dict 暂时是无序的。使用collections.OrderedDict()。如果您刚开始使用 Python,请从 Python 2 迁移到 3。最好了解当前版本的生命周期即将结束。
  • @Bharat 我不会为此烦恼dict,我会使用元组列表,例如movies_watched = set(movies_watched); lst = [(u, ('No', 'Yes')[u in movies_watched]) for u in movies_all]
  • @Bharat 这是一个列表理解。这是一个稍微简单的版本:lst=[(u, u in movies_watched) for u in movies_all]。这相当于lst=[]for u in movies_all:lst.append((u, u in movies_watched))。抱歉,在 cmets 中发布多行 Python 代码并不容易,但希望您能理解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-28
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多