我有一个如下所示的元组列表:
[(image, rgb tuple, float), (image, rgb tuple, float) ...]
我想按 rgb 值对这个列表进行排序。我得到了一个“目标”颜色,并且必须按照每个 rgb 元组与目标颜色的接近程度对列表进行排序。我有一个函数color_distance(c1, c2),它接受两种颜色并返回它们之间的距离。我想使用这个颜色距离函数作为比较器函数,通过每个元组的 rgb 值距离目标颜色对我的元组列表进行排序。
我可以通过选择排序对列表进行排序并使用我的 color_distance 函数进行比较,但我希望它排序更快/使用库函数。
我正在尝试sorted()在 python 中使用该函数,但不知道如何使用。
在Python中,我xml使用此模块将文件解析为字典.我的代码的核心很简单:
configdict = ConvertXmlToDict('tasks.xml')
for task in configdict['osmo_tasks']['tasks_entries']['entry']:
print task['id'], task['due_date'], task['summary']
Run Code Online (Sandbox Code Playgroud)
上面的代码将xml文件解析为字典,然后迭代tasks并打印它们.显然,它将按照从它们读取的相同顺序打印它们,xml文件:
1 736366 summary
2 735444 another summary
5 735796 blah
Run Code Online (Sandbox Code Playgroud)
如何打印按照排序的行task['due_date']?
这是一个示例xml文件:
<?xml version="1.0" encoding="utf-8"?>
<osmo_tasks version="000212">
<category_entries/>
<tasks_entries>
<entry>
<id>1</id>
<status>1</status>
<due_date>736366</due_date>
<due_time>53100</due_time>
<summary>summary</summary>
</entry>
<entry>
<id>2</id>
<status>1</status>
<due_date>735444</due_date>
<due_time>55800</due_time>
<summary>another summary</summary>
</entry>
<entry>
<id>5</id>
<status>0</status>
<due_date>735796</due_date>
<due_time>55800</due_time>
<summary>blah</summary>
</entry>
</tasks_entries>
</osmo_tasks>
Run Code Online (Sandbox Code Playgroud) 我有一份房屋清单:
list1 = [home1, home2, home3, home4]
Run Code Online (Sandbox Code Playgroud)
我还有另一份特定房屋清单:
list2 = [ home6, home7, home8, home10]
Run Code Online (Sandbox Code Playgroud)
每个家庭都有一个字段date.我想插入List2到list1视
home.date
例如if home7.date < home1.date,so home7将被插入list1之前home1
我尝试使用两个for循环,但它似乎非常慢,并且CPU完成了许多计算
for el in list1:
for elt2 in list2:
if el.date > elt2.date:
list1.insert((list1.index(el)),elt2)
Run Code Online (Sandbox Code Playgroud)
PS:一些日期未设置,使他们有一个None价值,我不想改变对应的索引home中list1
有任何想法吗 ?
我有一个看起来像这样的对象列表.
hand = [ Card(10, 'H'), Card(2,'h'), Card(12,'h'), Card(13, 'h'), Card(14, 'h') ]
Run Code Online (Sandbox Code Playgroud)
卡(10,'H)在这里不是元组,而是一个对象.我知道如果列表中的每个项目都是元组形式,如此排序,如何对此列表进行排序,
hand = sorted(hand, key = lambda x: x[0])
Run Code Online (Sandbox Code Playgroud)
但我不知道如何对对象列表进行排序.我想按第一个输入值排序我的列表,这是Card()中的数字
我怎样才能做到这一点?
编辑:这是Card()的定义.
class Card(object):
RANKS = (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
SUITS = ('C', 'D', 'H', 'S')
def __init__(self, rank=12, suit='S'):
if (rank in Card.RANKS):
self.rank = rank
else:
self.rank = 12
if (suit in Card.SUITS):
self.suit = suit.upper()
else:
self.suit = 'S'
def __str__(self):
if (self.rank == 14): …Run Code Online (Sandbox Code Playgroud) 我想dictionary在 Python 中返回 a中最小值的键。key, value 对的值会有几个数字,即dict[current] = (total, gone, heuristic). 如何返回最小消失值的键?
我正在使用Python 3.8。我有以下清单:
[['Bangalore', 116.0], ['Mumbai', 132.0], ['Kolkata', 234.0]]
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个节点并添加到successors列表中,如下所示:
successors = [<__main__.Node object at 0x7f89582eb7c0>, <__main__.Node object at 0x7f89582eb790>, <__main__.Node object at 0x7f89582eb7f0>]
Run Code Online (Sandbox Code Playgroud)
我创建了一个边缘列表并添加每个后继节点。之后根据距离值对其进行排序。我收到错误 -'<' not supported between instances of 'node' and 'node'
for succ_node in successors:
fringe.append(succ_node)
fringe.sort() <- Error Here
Run Code Online (Sandbox Code Playgroud)
这是我的节点类:
class Node:
def __init__(self, parent, name, g):
self.parent = parent
self.name = name
self.g = g
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我试图在python中对对象列表进行排序,但是这段代码不起作用:
import datetime
class Day:
def __init__(self, date, text):
self.date = date
self.text = text
def __cmp__(self, other):
return cmp(self.date, other.date)
mylist = [Day(datetime.date(2009, 01, 02), "Jan 2"), Day(datetime.date(2009, 01, 01), "Jan 1")]
print mylist
print mylist.sort()
Run Code Online (Sandbox Code Playgroud)
这个输出是:
[<__main__.Day instance at 0x519e0>, <__main__.Day instance at 0x51a08>]
None
Run Code Online (Sandbox Code Playgroud)
有人能告诉我解决这个问题的好方法吗?为什么sort()函数返回None?