我正在寻找一种干净的方法来迭代一个元组列表,其中每个都是这样的一对[(a, b), (c,d) ...]
.最重要的是,我想改变列表中的元组.
标准做法是避免更改列表,同时也迭代它,所以我该怎么办?这就是我想要的:
for i in range(len(tuple_list)):
a, b = tuple_list[i]
# update b's data
# update tuple_list[i] to be (a, newB)
Run Code Online (Sandbox Code Playgroud) 我很好奇是否有人知道已经实现的模糊整个CCLayer的方法.我使用一个简单的CCLayerColor设置为黑色,有一点不透明度,但我希望能够模糊背景足以成为难以区分的blob.
使用clojure.spec,是否可以为嵌套地图定义更“易于阅读”的规范?以下内容不太理想:
(s/def ::my-domain-entity (s/keys :req-un [:a :b])
(s/def :a (s/keys :req-un [:c :d]))
(s/def :b boolean?)
(s/def :c number?)
(s/def :d string?)
Run Code Online (Sandbox Code Playgroud)
假设一个符合实体的形状类似于
{:a {:c 1 :d "hello"} :b false}
我的抱怨是,如果规范具有任何嵌套的映射或任何深层的结构,则将变得更难阅读……因为您要在文件中上下移动关键字,并且它们不是“就地”声明。
作为比较,类似schema之类的东西允许使用更易读的嵌套语法,该语法紧密地反映了实际的数据形状:
(m/defschema my-domain-entity {:a {:c sc/number :d sc/string} :b sc/bool})
可以在clojure.spec中完成吗?
我有一个字典映射id_到数据值列表,如下所示:dic = {id_ : [v1, v2, v3, v4]}
.我试图遍历字典中的每个值并检索列表映射的某个索引的最大/最小值.
我想做的是这样的:
maximum = max([data[0], ??) for id_, data in self.dic.items()])
Run Code Online (Sandbox Code Playgroud)
......但显然这不起作用.是否有可能在上面的一行中执行此操作?
我正在写一本关于clojure的书,然后遇到了一个带有" - >>"的绊脚石.作者提供了一个comp
将camelCased
关键字转换为具有更惯用法的clojure地图的示例camel-cased
.这是使用comp的代码:
(require '[clojure.string :as str])
(def camel->keyword (comp keyword
str/join
(partial interpose \-)
(partial map str/lower-case)
#(str/split % #"(?<=[a-z])(?=[A-Z])")))
Run Code Online (Sandbox Code Playgroud)
这很有意义,但我并不喜欢partial
在整个地方使用来处理可变数量的参数.相反,这里提供了另一种选择:
(defn camel->keyword
[s]
(->> (str/split s #"(?<=[a-z])(?=[A-Z])")
(map str/lower-case)
(interpose \-)
str/join
keyword))
Run Code Online (Sandbox Code Playgroud)
这种语法更具可读性,并模仿我思考解决问题的方式(从前到后,而不是从前到后).扩展comp
以完成上述目标......
(def camel-pairs->map (comp (partial apply hash-map)
(partial map-indexed (fn [i x]
(if (odd? i)
x
(camel->keyword x))))))
Run Code Online (Sandbox Code Playgroud)
什么是等效使用->>
?我不确定如何使用地图索引(或任何迭代函数)->>
.这是错的:
(defn camel-pairs->map
[s]
(->> (map-indexed (fn [i x]
(if (odd? i)
x …
Run Code Online (Sandbox Code Playgroud) 给定一个集合,其中每个元素都是一个字符串,如何将集合减少为一个整数,这个整数是这些字符串长度的总和?
setA = ("hi", "hello", "bye")
reduce(lambda .... for word in setA)
Run Code Online (Sandbox Code Playgroud)
使用一些lambda函数调用reduce应该返回10(2 + 5 + 3).
我想,我可以用几个lambdas做到这一点,但必须有一个更清洁的方式.