- 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/
我循环遍历字符串列表以查看该字符串是否包含在字典的值中,然后尝试从该值中删除该字符串。 目前我是这样做的: Dictionary formValues = new Dictionary(); form
我正在将一些旧的 Java 4 代码更新到 Java 8(这里粘贴的太多了),最初的程序员选择让他们的几乎每个类都扩展这个只有静态方法和常量的巨大类,但我不知道他们的推理。 例如: public cl
在使用 z3 解决整数实数约束时,以下两种编写(等效)约束的方法中哪一种更可取(性能方面)? (断言(=>(和( (and (<= (/1.0 1024.0) value) (< value (/1.
我知道这是一个会引起很多争论的话题,但我想知道人们认为使用对象数据源的各种利弊是什么。我现在正在和另一个程序员做一个项目,他的经验和舒适度都 Root 于经典的 ASP,我不确定哪种方式会 a) 快速
抱歉,这是comp-sci 101的问题。我只是不确定是否缺少明显的东西。 因此,假设某些用户输入引发了错误,而我想捕获它并返回一些反馈。错误将是一个数字,0-8。0表示“无错误”。如果错误为3(假设
我们的 JSF Web 应用程序中有多个具有类似功能的搜索页面: 他们有搜索结果(将这些对象称为 T) 有一个包含搜索条件的对象(将此对象称为 C) 他们能够用名称保存搜索条件(将此对象称为 S) 所
我想创建一系列从基础对象继承或复制实例属性的对象。这使我决定使用哪种模式,我想询问您对哪种方法“更好”的看法。 //APPLY: // --------------------------------
我正在构建我的第一个 android 应用程序,也是我的第一个 Java 应用程序。我似乎无法理解枚举和数组列表之间的区别。我正在构建一个简单的闪存卡应用程序,它将包含带有问题的闪存卡,并将其存储为图
我有来自不同来源的客户和潜在客户,我需要弄清楚客户是否已经注册为潜在客户。 我使用 12 个字段进行匹配: address1_clear address2_clear address_clear co
Python 中最好的文字定界符是什么?为什么?单 ' 还是双 "?最重要的是,为什么? 我是 Python 的初学者,我正在努力坚持使用一个。我知道在 PHP 中,例如 "是首选,因为 PHP 不会
这个问题在这里已经有了答案: how to compare two optional NSArrays in Swift (4 个答案) 关闭 6 年前。 我正试图找到一种更好的方法来测试平等性。我
当您有一个表示为数组的循环缓冲区,并且您需要环绕索引(即,当您达到可能的最高索引并递增它时),是否“更好”: return (++i == buffer.length) ? 0: i; 或者 retu
有没有更好的(即更易读的)方式来写这个? if (isset($input_vars['directive']) && $input_vars['directive'] == 'edit') { 最佳
如果我必须在一个句子中找到 let's say a word,我可以想到两种方法 使用 string.IndexOf 使用正则表达式 哪个在性能或最佳实践方面更好 最佳答案 如果不用正则表达式做某事相
我通常知道两种用 C 语言设计通用链表数据结构的方法。我想知道哪种方法更好。在提问之前,我将简要介绍这两种方法: 一种方法是围绕如下结构构建函数: struct list_element {
我总是假设将 double 除以整数会导致更快的代码,因为编译器会选择更好的微码来计算: double a; double b = a/3.0; double c = a/3; // will com
有时,Border控制或 Rectangle控制将满足我的需求。一个例子是,当我正在实现 ControlTemplate 并且我已经在应用分层技术(即在网格中堆叠控件)时,我不需要将不同的 Radiu
代码 (Java) 片段 ..... ..... if ( response.check() == checkNumber ) { String message = "You ar
投资组合A→基金1 投资组合A→基金2 投资组合A→基金3 如果不使用is/has,我就无法框定我的句子。但是在1和2之间 1)具有: class PortfolioA { List obj;
我只是想知道哪个更好,或者更推荐用于处理表单数据。 // Controller // validation etc $data = array('name'=>$this->input->post('
我是一名优秀的程序员,十分优秀!