在Python中,如何减去两个非唯一的无序列表?假设我们有a = [0,1,2,1,0]
和b = [0, 1, 1]
我想这样做c = a - b
,并有c
成为[2, 0]
或[0, 2]
顺序无关紧要给我。如果a在b中不包含所有元素,则应该抛出异常。
请注意,这与套装不同! 我对找到a和b中的元素集的差异不感兴趣,而对a和b中元素的实际集合之间的差异感兴趣。
我可以使用for循环来执行此操作,在a中查找b的第一个元素,然后从b和a中删除该元素,依此类推。但这对我没有吸引力,这会非常低效(按O(n^2)
时间顺序)及时执行此操作应该没问题O(n log n)
。
Python
2.7和3.2添加了collections.Counter
该类,它是一个字典子类,可将元素映射到该元素的出现次数。可以用作多集。您可以执行以下操作:
from collections import Counter
a = Counter([0, 1, 2, 1, 0])
b = Counter([0, 1, 1])
c = a - b # ignores items in b missing in a
print(list(c.elements())) # -> [0, 2]
同样,如果您要检查其中的每个元素b
都在中a
:
# a[key] returns 0 if key not in a, instead of raising an exception
assert all(a[key] >= b[key] for key in b)
但是由于您坚持使用2.5,因此可以尝试将其导入并定义自己的版本(如果失败)。这样,您将确保获得最新版本(如果有),如果没有,则回落到可用版本。如果将来将其转换为C实现,您还将从速度改进中受益。
try:
from collections import Counter
except ImportError:
class Counter(dict):
...
您可以在此处找到当前的Python源。
问题内容: 我需要能够对两个带注释的列进行汇总 所以我想做这样的事情: 接着: 有谁知道如何完成上述工作? 问题答案: 其实, 从Django 1.8开始 就可以正常工作了。 此外,您还可以按表达式排序,这意味着您可以使用: 甚至只是:
最近我遇到了一个编程难题,我一生都找不到一个满意的答案:计算字符串给出的两个任意大整数之和,其中第二个整数可能是负数。这是在Java中完成的,没有使用任何BigInteger、BigNumber等类。 我最初使用伪代码的方法如下: 如果第二个字符串的第一个字符是'-',则设置减法标志。 将每个字符串转换为一个整数数组,每个数字一个。 用零扩展最短数组和左键,以便两个数组大小相同。 循环遍历数组的每
问题内容: 我的df如下所示: 我想从每个国家的Val1中减去Val10,所以输出如下: 到目前为止,我已经: runDeltas导致此错误: 解决此问题的正确方法是什么? 问题答案: 给定以下数据框: 它归结为一个简单的广播操作):
key2值2 ... 文件2: 我让映射写键,值用一个字符预先说明它来自file1或file2,但不确定如何编写reduce阶段 我的map方法是
我试图从dfb中减去dfa,其中列映射基于第三个映射数据帧。在本例中,应从x1中减去B,从x2中减去A。 这可以通过循环和其他一些肮脏的方法来实现,但我想知道是否有更简洁的方法来实现这一点。 数据帧a 数据帧b 数据帧c 所需结果
问题内容: 我正在从一个字符串中解析两个日期,如下所示: 我需要做的是找出这两个日期之间的区别,例如: = 8天2小时36分钟21秒 ^这是我需要的两个日期/时间 我相信我需要解析格式并将其转换为另一种格式,然后减去两者之间的差并进行数学运算以得出之间的天/小时/分钟/秒 问题答案: 与其他回答者试图暗示的相反,在标准Java SE中,计算两个日期之间的差异并不是那么简单。 您的第一步确实是将这些