我正在写一个用于在邮局购买邮票的小优化工具.
在这个过程中,我正在使用一个字典,我根据我在其他"着名"问题中学到的东西进行排序: 按值排序Python字典
在我的情况下,我的字典稍微复杂一些:
- 一个四项目元组来制作密钥
- 另一个五项目元组来制作数据.
这个字典的来源是一个迭代,每个成功的循环都添加一行:
MyDicco[A, B, C, D] = eval, post, number, types, over
Run Code Online (Sandbox Code Playgroud)
这是一个简单的运行的只是一个很小的例子,试图为75美分:
{
(0,0,1,1):(22,75,2,2,0)
(0,0,0,3):(31,75,3,1,0)
(0,0,2,0):(2521,100,2,1,25)
(0,1,0,0):(12511,200,1,1,125 )
(1,0,0,0):( 27511,350,1,2,275)
}
到目前为止,我使用此代码进行排序(正在工作):
MyDiccoSorted = sorted(MyDicco.items(), key=operator.itemgetter(1))
Run Code Online (Sandbox Code Playgroud)
我按照我的评分进行排序,因为排序是为了将最佳解决方案带到顶端.评估得分只是五项目元组中的一个数据(在示例中,这些是评估得分:22,31,2521,12511和27511).
正如你在上面的例子中看到的那样,它是由第二个元组索引1进行排序(如我所愿).但是我不得不(脾气暴躁地)将我的"评分"带到我的第二个元组的前面.代码显然是使用整个二元组来进行排序过程,这很重且不需要.
这是我的问题:我怎样才能更精确地排序.我不想按字典的第二个元组排序:我想准确地定位第一个项目.
理想情况下,我想把这个值恢复到原来的位置,即成为第二个元组中的最后一个项目 - 并且仍然按它排序.
我已经阅读并试验了operator.itemgetter()的语法,但还没有设法"抓住""我的第二个项目的第一项". https://docs.python.org/3/library/operator.html?highlight=operator.itemgetter#operator.itemgetter
(注意:允许使用元组作为键和值,根据:
https://docs.python.org/3/tutorial/datastructures.html?highlight/_Dictionary
,这些对我的项目工作正常;这个问题是只是为了更好的排序)
对于那些喜欢一点背景的人(你会对我大喊我应该使用其他方法,但我现在正在学习字典(这是这个项目的目的之一)):
这种优化适用于发展中国家,这些国家通常没有某些邮票价值,或者在任何特定邮局的库存有限.它稍后将在Android手机上运行.
我们正在定期邮寄(是的,信件).如果您考虑六种不同的基于目的地的邮资和数百封邮件信件,那么使用可用值确定每个目的地的确切邮资并找到具有特定值的低库存的解决方案是一个不平凡的过程.
还有其他模块可以帮助将理论上的最佳解决方案变成可以在任何一天实际购买的东西,通过战略对话指导......
关于我在这个问题上的字典:我迭代所有合理的(高到足以制作所需的邮资,并且只支付高达一个邮票的一小部分)邮票价值的组合.
然后我计算一个"成功"值,它基于所需的邮票数量(优先级),所需类型的数量(较低的优先级)(因为购买不同的邮票需要额外的时间在柜台)和非常高的支付罚款-过度.所以最低价值意味着最高成功.
我在字典中收集所有合理的"解决方案",其中需要标记的元组作为关键字,而另一些结果数据的元组构成了值.它有点过度定义,因为人类需要在项目的这个阶段读取它(用于调试).
如果你很好奇并且想要阅读这个例子(第一行):
colums是:
我有一个包含六个项目的无害列表“mylist”。永远不会空着,永远不会有任何野兽般的物品。
mylist = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff']
Run Code Online (Sandbox Code Playgroud)
我发现有两种方法可以为列表建立索引以进行切片。对于这个问题,我将它们称为上索引(从0到5)和下索引(从-1到-6)。这是一个快速图表(我发布了一张带有颜色的照片,已被另一个用户替换):
<<<<|_________mylist[5:?:-1]_____________|
|___mylist[0:3:1]______|>>>>>>
?
(x) 0 1 2 3 4 5 (6)
aaa bbb ccc ddd eee fff
(-7) -6 -5 -4 -3 -2 -1 (y)
?
<<<<<<|___mylist[-1:-5:-1]___|
|______mylist[-6:?:1]________________|>>>>>
Run Code Online (Sandbox Code Playgroud)
为了轻松地在列表的开头进行切片,我可以使用上面的索引,如下所示:
>>> mylist[0:3:1]
['aaa', 'bbb', 'ccc']
Run Code Online (Sandbox Code Playgroud)
为了在接近末尾时轻松切片,我发现较低的索引很有帮助,例如:
>>> mylist[-1:-5:-1]
['fff', 'eee', 'ddd', 'ccc']
Run Code Online (Sandbox Code Playgroud)
我所说的“轻松”是指不关心我的代码与列表长度的方面。
我了解到 Python 切片是“始终保留”(也称为“最多但不包括”)。我在图表中将其显示为从切片末尾指向前面的“下一项”的“箭头”(在切片的意义上/方向上“向前”)。
对于我的用户,我需要显示列表中的前这么多项目。(这些是递归搜索、评估和排序运行的结果。)因为通常这个列表相当长,所以我确实向后打印它(在控制台中),这样当脚本结束时,最佳n结果仍然可以在屏幕。所以我的步骤就是-1在这个背景下进行的。
我想使用变量,以适应不同用户(和不同屏幕尺寸)的不同需求。为了调试和某些用户,我希望能够打印所有结果,即向后打印整个列表。我想要这样的语法:
start = 5 # I only need to know "5" for …Run Code Online (Sandbox Code Playgroud) 我运行带有所有更新的Android Studio 3.2.1。我从SVG主图稿生成所有图标,因此分辨率不是问题。
正如预览在Asset Studio中显示的那样,所有图标都会生成并存储到\ res \ mipmap中。我还可以看到我的Google Play商店图标,该图标在预览中的所有其他尺寸旁边相当大。
但是在实际生成后,我找不到Play商店图标。https://developer.android.com/studio/write/image-asset-studio?utm_source=android-studio此处的在线文档 未提及额外图标的位置。
抱歉,这很简单。
奖励问题:如果是在Android Studio中以这种方式生成的,则该软件包中是否包含商店图标,还是需要像以前一样在商店控制台中手动上传?
python ×2
python-3.x ×2
android ×1
dictionary ×1
icons ×1
list ×1
slice ×1
sorting ×1
syntax ×1