- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这是我已经进行了一段时间的项目的一部分。我很难将心理伪代码与我实际可以编写的东西相结合,这主要是由于个人对这些东西是如何工作的误解。
我正在使用以下类跟踪假想水果摊的库存:
class Fruit(object)
def __init__(self,name,qty,price)
self.color = str(color)
self.qty = int(qty)
self.price = float(price)
def getName(self): return self.color
def getQty(self): return self.qty
def getPrice(self): return self.price
def description(self): return self.color,self.qty,self.price
此类中的对象最终作为字典键的值被导入。每个键可以有多个值,存储在一个列表中,这样当打印字典时,它会返回类似这样的内容(为了便于阅读,使用换行符:)
Lemon: [(Yellow, 5, 2.99)]
Apple: [(Red, 10, 0.99), (Green, 9, 0.69)]
Cherry: [(White, 2, 5.99),(Red, 5, 5.99)]
我现在正在尝试最终获得我想象中的水果摊上所有水果的总值(value)。我最初的想法只是将每个值视为一个列表,遍历列表直到我找到一个整数,将该整数乘以它后面索引中的 float ,然后将该数量添加到一个具有运行总计的变量中;然后继续寻找另一个整数。如果列表“Cherry”的“索引 1”不是 (Red, 5, 5.99) 而不是 (2),这会很好用。
所以,有几个问题。
每次我做这样的事情时,我有一个包含多个值的字典,这些值都是类对象,每个值都存储为括号(因为缺少更好的称呼。)那应该发生,还是我需要重新评估我正在做的事情的方式,因为我导致了那件事发生?
如果我不需要在这里重新评估我的选择,有没有办法分解“括号”(因为缺少更好的东西来立即想到它们)能够把整个事情当作一个列表?
有没有更好的方法来完成我想做的事情而不涉及遍历列表?
提前致谢。一周以来,我一直在与这个问题的各个部分作斗争。
最佳答案
假设字典是这样的:
fruit_stand = {
"Lemon": [(Yellow, 5, 2.99)],
"Apple": [(Red, 10, 0.99), (Green, 9, 0.69)],
"Cherry": [(White, 2, 5.99),(Red, 5, 5.99)]
}
你实际上可以遍历字典来获取它的键:
for fruit_name in fruit_stand:
print fruit_name
# Lemon
# Apple
# Cherry
# NOTE: Order not guaranteed
# Cherry, Lemon, Apple are equally likely
然后,您可以使用字典的 items
方法获取 key
、value
的元组(您称之为“括号”)对:
for fruit_name, fruits in fruit_stand.items():
print fruit_name, "=>", fruits
# Lemon => [(Yellow, 5, 2.99)]
# Apple => [(Red, 10, 0.99), (Green, 9, 0.69)]
# Cherry => [(White, 2, 5.99),(Red, 5, 5.99)]
list
(即方括号中的 []
)也是可迭代的:
for fruit in [(White, 2, 5.99),(Red, 5, 5.99)]:
print fruit
# (White, 2, 5.99)
# (Red, 5, 5.99)
因此我们可以使用每个 fruits
列表来访问我们的 tuple
:
for fruit_name, fruit_list in fruit_stand.items():
# Ignore fruit_name and iterate over the fruits in fruit_list
for fruit in fruit_list:
print fruit
正如我们在 items
中看到的那样,我们可以将元组解包为多个值:
x, y = (1, 2)
print x
print y
# 1
# 2
所以我们可以将每个 fruit
解压成它的组成部分:
for fruit_name, fruit_list in fruit_stand.items():
# Ignore fruit_name and iterate over the fruits in fruit_list
for color, quantity, cost in fruit_list:
print color, quantity, cost
然后得到总数并不难:
# We need to store our value somewhere
total_value = 0
for fruit_name, fruit_list in fruit_stand.items():
# Ignore fruit_name and iterate over the fruits in fruit_list
for color, quantity, cost in fruit_list:
total_value += (quantity * cost)
print total_value
综上所述,有很多更清晰的做事方式:
您可以使用列表理解来简化您的 for
循环:
for fruit_name in fruit_stand
operation(fruit_name)
可以翻译成这个列表理解:
[operation(fruit_name) for fruit_name in fruit_stand]
因此,我们可以将嵌套的 for
循环翻译成:
sum([cost * quantity \ # Final operation goes in front
for _, fruits in fruit_stand.items() \
for _, cost, quantity in fruits])
因为我们实际上并不需要列表,所以我们可以去掉它,Python 会为我们创建一个生成器:
sum(cost * quantity \ # Note the missing []
for _, fruits in fruit_stand.items() \
for _, cost, quantity in fruits)
您可以向 Fruit
添加一个 __add__
方法,以便将两组水果加在一起得到两组 Fruit< 的总成本
(但您可能希望创建一个中间数据结构来执行此操作,例如 Basket
,这样 Fruit
就不必担心数量
并不真正属于 Fruit
,从某种意义上说,Fruit
的任何实例都具有内在数量 1。我省略了此选项的代码,因为这个答案已经太长了。
关于python - 将类的实例分解为列表,或 : a better way to sum class variables?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16311369/
我第一次决定切换到 InnoDB 并尝试使用外键和其他 InnoDB 功能。 创建关系时,我应该只在一张表上声明它们吗?还是两个表? 例如,对于以下每种情况,您将在何处以及如何声明关系? 1 用户有很
老方法 当我以前在需要内容被搜索引擎索引的项目中异步加载页面时,我使用了一种非常简单的技术,那就是 Page $('#example').click(function(){
我目前正在为自己创建自己的自定义应用程序来编译 Java 文件。我的应用程序可以完美地编译 Java 文件,但现在我想开始为 Java 文件添加某种类型的测试(例如,我将一些变量传递给许多不同的文件
我需要建立从我的 iPhone 应用程序到客户服务器的 HTTPS 双向 SSL 连接。但是我没有看到任何安全的方式来将客户端证书传递给应用程序(这是一个电子银行应用程序,所以安全性确实是一个问题)。
我从事 Java 工作已经很长时间了,大约 6 个月前开始使用 Scala。我喜欢这门语言。我发现的一件事是,做事有多种方法。我不知道这是因为该语言的性质,还是因为它还很年轻并且在不断发展,习惯用法和
这是我所指的示例代码。 https://sites.google.com/site/ssljavaguide/example-code/2-way-ssl 我是否可以不设置与 keystore 相关的
我读过有关使用 MySQL AES_ENCRYPT/AES_DECRYPT(双向加密)不如使用 PHP - hash()(单向加密)安全的信息。 http://bytes.com/topic/php/
我正在进行一个路线选择项目,我需要使用道路类型和单向/双向交通信息填充道路网络。我想知道Tiger/Line道路数据集是否包含这样的数据。。我下载了加利福尼亚州的Tiger/Line道路数据集,但没有
我需要开发一个 iPad 应用程序,它应该管理两种方向模式(横向和纵向)。 根据 official Apple iOS documentation , 有 2 种方法可以继续。 -第一个包括在收到旋转
我正在训练一个 randomForest 模型,目的是保存它以进行预测(它将被下载并在外部上下文中使用)。我希望这个模型尽可能最小。 我读到有很多options和 packages减少模型的内存大小。
为什么将参数传递给匿名函数会影响结果?例如,下面的脚本将 a1 显示为 function(),将 a2 显示为数组。 var a1=(function(){return [1*2,2*2,3*2];}
我有一个 Python 列表: listx = [["a", 127, "Blue", 0], ["b", 127, "Red", 1], ["b", 127, "
在查看 Java 库时,特别是构造函数,我注意到字段通常会出于某种原因进行初始化和验证: public java.awt.Color(int r, int g, int b, int a) {
我想编写 Git 脚本。只创建一个 Unix 脚本是最好的方法吗? #!/bin/bashgit push origin master &&git checkout develop &&git mer
这个问题在这里已经有了答案: class or method alias in java (8 个回答) 去年关闭。 我有一个类的名称可能不必要地繁琐,其中包含许多我在其他地方使用的静态方法。 而不是
这个问题在这里已经有了答案: Best way to check function arguments? [closed] (14 个回答) Parameter validation, Best pr
在阅读我遇到的代码时,结构的以下定义和初始化: // header file struct foo{ char* name; int value; }; //Implementation file s
我正在使用多页表单方法在 Drupal 中开发一个自定义模块,并且我希望对步骤进行可视化。 步骤 1 > [_Step_2_] > 步骤 3 > 完成 商业规则: 他们总是能看到所有的步骤,以及他们现
Josh 的 answer 给我留下了深刻的印象关于客户端的“Angular 方式”和声明式风格。 但是你能帮我理解一下,怎么做吗: 我有一个单页应用程序,左侧是菜单栏,右侧是 div 容器。 当用户
Subversion 商店正在考虑改用 Mercurial,试图提前弄清楚开发人员的所有提示将是什么。这里有一个相当常见的用例,我不知道如何处理。 我正在研究一些较大的功能,我有一个重要的代码部分——
我是一名优秀的程序员,十分优秀!