- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
>> non-6ren">
我有任意嵌套的容器对象(例如列表和字典)。
我想测试在调用一个函数之后,容器对象是否发生了变化。
>>> x = [[1,2,3], {1,2,3}, "other data", 1]
>>> non_mutating_func(x)
>>> x
[[1,2,3], {1,2,3}, "other data", 1]
>>> mutating_func(x)
>>> x
[[100,2,3], {1,2,3}, "other data", 1] # One of the inner lists got changed. x got mutated.
我还想检查对象身份。这是我所说的检查对象身份的示例:
>>> a = [[1,2],1,2]
>>> def f(x):
... x[0] = [1,2]
...
>>> b = a[0]
>>> f(a)
>>> b is a[0]
False
a[0]
中的列表 [1,2]
已被另一个列表 [1,2]
替换,但列表是不同的对象。所以它算作突变。
注意:以前,对于非嵌套列表,我可以这样做:
x = [1,2,3,4]
x_ori = x[:]
f(x)
mutated = False
if len(x) != len(x_ori):
mutated = True
for i,j in zip(x, x_ori):
if not (i is j):
mutated = True
break
此外,原始容器可能是字典而不是列表。
x = {1:1, "2":"2"}
x_ori = x.copy()
f(x)
mutated = False
if len(x) != len(x_ori):
mutated = True
for k,v in x_ori.items():
if not (k in x):
mutated = True
break
if not (x[k] is v):
mutated = True
break
嵌套容器是否可行?如果是这样,我该怎么做?
最佳答案
棘手的一点是“同一实例”检查。您可以递归地为整个结构创建一个哈希码,或者创建一个深拷贝并比较两者,但两者都将无法通过“同一实例”检查。
您可以创建原始列表的副本,作为以后的引用,但不仅如此:您必须将结构中的每个元素与其原始 id
配对:
def backup(data):
# similar for set, dict, tuples, etc.
if isinstance(data, list):
return id(data), [backup(x) for x in data]
# basic immutable stuff, string, numbers, etc.
return id(data), data
然后,您可以递归地检查结构并比较所有 ID和递归地比较任何子结构的内容:
def check(backup, data):
id_, copy = backup
# check whether it's still the same instance
if id_ != id(data):
return False
# similar for set, dict, tuples, etc.
if isinstance(data, list):
return len(data) == len(copy) and all(check(b, d) for b, d in zip(copy, data))
# basic immutable stuff must be equal due to equal ID
return True
这是一个示例,以及一些示例修改:
data = [[1,2,3], [4, [5,6], [7,8]], 9]
b = backup(data)
# data[1][0] = 4 # check -> True, replaced with identical value
# data[1][1] = [5,6] # check -> False, replaced with equal value
# data[1][1].append(10) # check -> False, original value modified
print(check(b, data))
当然,这两种方法都不完整,必须针对其他结构进行扩展,例如dict
、set
、tuple
等。对于set
和dict
,您可能想要比较 sorted
条目,但除此之外它们在本质上应该非常相似。
请注意,从技术上讲,它不保证列表未被修改,例如在具有该 ID 的原始对象被垃圾回收后,可以重用 ID,但在一般情况下,上述方法应该有效。
关于python - 如何检查嵌套容器是否发生变异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42135867/
我有一个包含配对数据的数据集(同一家庭的成员)。 身份证 是个人标识符和 户号是合作伙伴的标识符(反之亦然)。 我需要的是为每个 添加一个额外的列(职业)。 id 他\她的伴侣。 我的数据看起来像这样
mutate 能否根据跨变量应用的逻辑条件创建新变量? 更具体地说,请考虑以下数据。 set.seed(1234) val = 1) head(dat) a b c d anyABCD 1 0 0
我的 df 看起来像这样: df % mutate_at(vars(starts_with("paid")), list(prc = ~. / expenses)) # expenses mon
我的 df 看起来像这样: df % mutate_at(vars(starts_with("paid")), list(prc = ~. / expenses)) # expenses mon
我在这里为项目 Euler 问题 31 运行了这个简单的代码。 不需要 Euler Q;我只想知道,为什么我的列表值会发生变化,即这是打印 [2.0,2.0,2.0,2.0,2.0] 的许多列表的列表
我使用了排列和变异组合来根据分组进行添加。例如,我使用了以下内容: master_df % group_by(asof_dt) %>% mutate(tot_flag = sum(ls_fla
我在让 mutate、cross 和 case_when 正常运行时遇到了一些麻烦,我在这里重新创建了一个简单版本的问题: a 1 1 2 3 2 2
我有代表用户某种交易类型的不规则时间序列数据。每行数据都带有时间戳,表示当时的事务。由于数据的不规则性质,某些用户一天可能有100行,而其他用户一天可能有0或1个事务。 数据可能看起来像这样: dat
您如何恰本地解释为什么这两个示例不同? // Reassignment let a = 1; let b = a; a = 2; console.log(b); // → 1 // Mutation
基本上我想做的是发送一个字符串列表 ex: ["aa","bb","vv"] 到 graphql Mutation 字段中,目前这是我的 Mutation Schema "listTest": &gr
使用 dplyr 进行组均值居中的有效/首选方法是什么,即获取组中的每个元素(mutate)并对其执行操作和汇总统计信息(该组的总结)。以下是使用基本 R 以 mtcars 为中心的组均值: do.c
pcd % arrange(tripNo, procDate, delay) %>% group_by(tripNo) %>% mutate(delayErr = (row_number(
我想知道查询类型后面的字符串有什么意义,在这种情况下是“ProvisionQueues”,似乎从字符串中删除它不会影响任何东西——它只是用于日志记录还是什么。元数据? mutation Provisi
所以,我正在尝试设计我的 Apollo 服务器。我想用一个对象作为参数来创建一个突变。 这是我的架构的一个片段,它以某种方式导致了问题: 我认为它在语法上是正确的,但我遇到了这个错误: {"error
CREATE OR REPLACE TRIGGER UPDATE_TEST_280510 AFTER insert on TEST_TRNCOMPVISIT declare V_TRNCOMPNO N
我有以下带有查询和突变的组件,但我的组件没有收到数据和突变 prop。 我的代码是不是做错了什么或遗漏了什么?虽然查询确实得到执行,但它没有传递下去。 this.props.mutate 和 this
我用 Go 编写了一个客户端应用程序,它需要与服务器端的 C 程序进行交互。客户端执行 AES CFB 加密,服务器解密。不幸的是,服务器端存在重用初始化向量的错误。它尝试根据以下条件进行 3 次解密
我的前端是 localhost:3000 ,我的 GraphQL 服务器是 localhost:3333 . 我已经使用 react-apollo 在 JSX 领域中查询/变异,但还没有从 Expre
我试图改变通常情况下来自 kube-scheduler 的资源“绑定(bind)”。 以下是我的“ValidatingWebhookConfiguration”yaml: apiVersion: ad
如所述here , 这是一个 reference implementation用于 kubernetes e2e 测试的 webhook 服务器。在 main 函数中,定义了一些端点来处理不同的突变请
我是一名优秀的程序员,十分优秀!