我在python2中有2个对象列表。它们属于不同类型但具有共同属性(' name')。我控制一个列表(my_list),另一个列表发送给我(src_list)。
我想在src_list中找到 new 对象,这些对象不在my_list中,通过比较他们的姓名'属性。
伪代码(以及我在C中如何做到这一点)如下所示,但是在我采用python方法之后,我可能会列出理解和内容,但我无法理解它进行。
new_list = []
for srco in src_list: # iterate everything in src list
found = False
for myo in my_list: # iterate everything in my list
if(srco.name.lower() == myo.name.lower()): # compare names, break if true
found = True
break
if not found: # add to new list if wasn't found
new_list.append(srco)
答案 0 :(得分:1)
使用集合进行快速查找。
Short types = new Short();
另外,如果你想学习更多pythonic,不要做public ActionResult Index()
{
AllDBModels allModels = new AllDBModels();
allModels.AllGraphs = new Graph();
allModels.AllGraphs.Charts = new List<Highcharts>();
ChartsModel model = new ChartsModel();
model.Charts = new List<Highcharts>();
ViewBag.Rooms = db.namtar_studyrooms.ToList() //the collection here (you should changeit, just an example)
}
模式。这样做:
@Html.DropDownListFor(model => model.reports.RoomNumber, new SelectList(ViewBag.Rooms, "RoomID", "RoomNameForDisplay"), "Select Room for default", new { @class = "form-control" })
答案 1 :(得分:1)
一种简单的方法是首先生成要从index.search('john', function searchDone(err, content) {
$scope.users.push(content.hits);
console.log(content.hits);
$scope.$apply();
});
中排除的名称集,然后迭代span>strong
以保留无法从集合中找到的项目:
< span > < strong > < / strong > < / span >
答案 2 :(得分:1)
你可以使用套装来做到这一点。 创建一个包含my_list名称的集合,另一个包含src_list的集合并简单地减去这两个:
diff_set = src_list_set - my_list_set
然后您可以获取名称显示在diff_set
中的对象my_list_set = {obj.name.lower() for obj in my_list}
src_list_set = {obj.name.lower() for obj in src_list}
diff_set = src_list_set - my_list_set
new_list = [obj for obj in src_list if obj.name.lower() in diff_set]
(解决方案可能不是特别短,但通过您可以找到on the official doc的其他操作替换减号,它可以在很多其他情况下以最低成本完成)
答案 3 :(得分:1)
是的,就像你已经说过的那样,列表理解会浮现在脑海中。然后,map
内置函数可用于为其中一个列表中的名称创建迭代器。
result = [obj for obj in srco if obj.name.lower() not in set(map(lambda x: x.name.lower(), myo))]