- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个列表(实际上是一个可迭代的),它是使用 python 的 itertools 库的这个函数创建的:
comb = [c for i in range(len(menu)+1) for c in combinations(menu, i)]
给你一个想法菜单
是一个这种格式的列表[[“食物名称”,糖克数]]:
menu = [ ["cheesecake", 13], ["pudding", 24], ["bread", 13], .........]
所以comb
本质上是一个包含菜单子(monad)列表所有可能组合的列表。我必须通过梳子迭代创建所有可能的项目组合,其总糖含量将完全等于(不是更少,不是更多,完全)max_sugar = 120
。
所以我想我可以迭代comb
中的每个可能的组合,并使用if
语句检查该组合中项目的糖总和是否完全等于max_sugar
。如果是这种情况,我想输出此组合中的菜单项的名称。否则我想以这种方式继续进行其他组合:
for e in comb:
for l in e:
if sum(sugars of items in this combination) == max_sugar: # pseudo-code
print items in this combination #pseudo code
我想我遇到的问题是仅访问l
中每个项目的糖值并检查条件,如果为TRUE
则打印名称。我不精通 python 列表理解,但在过去的几天里我已经进步了很多!
flag = 0
num_comb = 1
comb = [c for i in range(len(menu)+1) for c in combinations(menu, i)]
for e in comb:
if sum(l[1] for l in e) == targetSugar:
print "The combination number " + str(num_comb) + " is:\n"
print([l[0] for l in e])
print "\n\n\n"
num_comb += 1
flag = 1
if flag == 0:
print "there are no combinations of dishes for your sugar intake... Sorry! :D "
最佳答案
正如您所提到的,您可以使用列表理解来迭代所有菜单组合,并限制为那些含有您正在寻找的糖量的餐食
:
>>> # input data
>>> menu = [ ["cheesecake", 13], ["pudding", 24], ["bread", 13] ]
>>> max_sugar = 26
>>> # construct all combinations of menu items
>>> comb = [c for i in range(1, len(menu)+1) for c in combinations(menu, i)]
>>> list(comb)
[(['cheesecake', 13],), (['pudding', 24],), (['bread', 13],), (['cheesecake', 13], ['pudding', 24]), (['cheesecake', 13], ['bread', 13]), (['pudding', 24], ['bread', 13]), (['cheesecake', 13], ['pudding', 24], ['bread', 13])]
>>> # restrict to meals with exactly max_sugar
>>> meals = [ e for e in comb if sum( sugar for _, sugar in e) == max_sugar ]
>>> meals
[(['cheesecake', 13], ['bread', 13])]
唯一棘手的部分是,当您迭代每个组合时,每个元素 e
都是一个包含名称和糖数的列表。因此,您可以使用以下方法测量组合e
中的糖含量:
sum( sugar for _, sugar in e) == max_sugar
在此基础上,如果您只想返回每顿饭中食物的名称,您可以使用:
>>> [ [name for name, sugar in m] for m in meals ]
[['cheesecake', 'bread']]
关于python - 如何在字符串/整数列表中仅选择整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21437511/
如标题所示,ans_list是一个答案列表,ans_index是一个数字(答案在词汇表中的索引,但与atm无关) 这里生成的 tree.anslist 是什么? (例如,仅针对第一个),忽略迭代。 f
我目前将用户的输入存储在逗号分隔的列表中,如下所示: Userid | Options 1 | 1,2,5 用户在一个数组形式中勾选一组选项,然后用逗号连接起来 1,2,5 然后 MySQ
我目前将用户的输入存储在逗号分隔的列表中,如下所示: Userid | Options 1 | 1,2,5 用户在一个数组形式中勾选一组选项,然后用逗号连接起来 1,2,5 然后 MySQ
我想知道如何完全展平列表和包含它们的东西。除其他外,我想出了一个解决方案,它可以将具有多个元素的东西滑倒并将它们放回原处,或者在滑倒后将具有一个元素的东西拿走。 这与 How do I “flatte
我想知道如何完全展平列表和包含它们的东西。除其他外,我想出了一个解决方案,它可以将具有多个元素的东西滑倒并将它们放回原处,或者在滑倒后将带有一个元素的东西拿走。 这与 How do I “flatte
这个问题已经有答案了: Convert nested list to 2d array (3 个回答) 已关闭 7 年前。 java中有没有快捷方式可以转换 List> 到 String[][] ?
我在排序时遇到问题 List> 。我创建了一个自定义比较器,在其中编写了对数据进行排序的代码。 public class CustomComparator implements Comparator
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Java Generics: Cannot cast List to List? 我只是想知道为什么下面的java代
试图想出一个 LINQy 方法来做到这一点,但我什么也没想到。 我有一个对象列表<>,其中包含一个属性,该属性是逗号分隔的字母代码列表: lst[0].codes = "AA,BB,DD" lst[1
假设我有这些任务: points = [] point = (1, 2) 我怎么会这样做: points += point 它工作得很好,并且给了我点 = [1, 2]。但是,如果我这样做: poin
如何在 scala 中将 List[Task[List[Header]]] 类型转换为 Task[List[Header]]。 我有一个方法返回 Task[List[Header]] 并多次调用 do
如何在 Java 中查找二维列表的元素? 我有一个参数为 List> 的函数我想知道如何找到这个列表的行和列。 最佳答案 如果你喜欢 List> obj 然后你就可以像这样访问 obj.get(cur
分配 List到 List工作正常。 分配 List>到 List>不编译。 代码 public class Main { public static void main(String[] a
我正在用 Java 编写一个方法,该方法必须接收并迭代 Serializable 的 List。 有什么区别: public void myMethod(List list) { } 和 public
我看到很多人想用 mvvm 更新网格/列表/树的一部分,但他们不想刷新整个列表。 对于所有遇到此问题的人,我做了以下示例。 希望这对你有用。 最佳答案 这是一个简单的例子。整个代码中最重要的是: Bi
我正在为现有的 C++ 库编写包装器,该库使用列表,其中 T 是自定义结构。我被建议使用 vector 而不是列表,但我试图避免修改库。 为了更好地理解这个场景,我做了一个简单的应用程序,使用一个列表
List list List list 这两种声明有什么区别吗? 谢谢, 最佳答案 是的。 List可以包含所有派生自 Base 的不同事物的混合物. List包含同质项(从某种意义上说,它们必须全部
有人可以尽可能详细地解释以下类型之间的区别吗? List List List 让我更具体一点。我什么时候想使用 // 1 public void CanYouGiveMeAnAnswer(List l
我有一个元组列表,每个元组都是一对列表。所以我的数据看起来像: mylist = [(['foo', 'bar'], ['bar', 'bar']),(['bar', 'bar'],['bar', '
也许是一个时髦的标题,但我遇到了以下问题: 给定一个类型为 (a * b) list 的列表,我想创建一个类型为 (a * b list) list 的新列表。一个例子: 给定列表 let testL
我是一名优秀的程序员,十分优秀!