我正在尝试在 python 中创建内置的 map() 函数。这是我的尝试:
def mapper(func, *sequences):
if len(sequences) > 1:
while True:
list.append(func(sequences[0][0],sequences[0][0],))
return list
return list
Run Code Online (Sandbox Code Playgroud)
但我真的很困惑,因为如果用户给出例如 100 个参数,我该如何处理这些参数?
以下是我使用 Python 3.8.1(在 macOS Mojave、10.14.6 上,以及在其他一些平台上的 Python 3.7(或较旧版本))。我是计算新手,不知道如何请求改进语言,但我认为我发现了内置函数的奇怪行为map。
随着代码的next(iter(()))提高,我期望从以下代码中StopIteration得到:StopIteration
tuple(map(next, [iter(())]))
令我惊讶的是,这默默地返回了元组()!
StopIteration因此,当命中返回next的“空”迭代器时,地图对象的解包似乎停止了
iter(())。但是,我认为异常处理不正确,因为StopIteration在从列表中选择“空”迭代器(被 命中next)之前没有引发异常。
编辑:如果我以不同的方式解包地图对象,例如 by list、 for 循环、在列表中解包、解包函数参数、 by set、 ,则行为类似dict。所以我相信这不是tuple,但这map是错误的。
编辑:实际上,在 Python 2 (2.7.10) 中,“相同”代码会引发
StopIteration. 我认为这是理想的结果(除了map在这种情况下不返回迭代器)。
我使用具有以下结构的库:
struct KeyValue1 {
key: Vec<u8>,
value: Vec<u8>,
}
fn get() -> Vec<KeyValue1> { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
我需要将此向量转换为具有以下结构的几乎相似的向量:
struct KeyValue2 {
key: Vec<u8>,
value: Vec<u8>,
}
Run Code Online (Sandbox Code Playgroud)
为了能够从一个向量转换为另一个向量,我目前使用以下代码:
let convertedItems = items.iter().map(|kv| -> KeyValue2{
key: key.clone(),
value: value.clone()
}).collect()
Run Code Online (Sandbox Code Playgroud)
虽然这有效,但它克隆了两个载体,效率很低。我不再需要原始items向量,因此我想将所有权从 转移KeyValue1到KeyValue2,但我还没有找到方法来做到这一点。
我需要在Bigtable(db)中存储一个很大的整数列表.为了提高效率,我将它们存储为两个连续项之间的差异.
例如:
original_list = [1005, 1004, 1003, 1004, 1006]
存储上面的列表(实际上包含超过1000k的项目)为
start = 1005 diff = [-1, -1, 1, 2]
我能管理得最近的是,
ltp = [start] map(lambda x: ltp.append(ltp[-1] + x), tick)
我正在寻找一种有效的方法将其转换回原始列表.
我试图使用new Array()构造函数,map以创建一个单行代码,创建一个元素列表.像这样的东西:
let arr = new Array(12).map( (el, i) => {
console.log('This is never called');
return i + 1;
});Run Code Online (Sandbox Code Playgroud)
阅读文档,这种行为是有道理的.
基本上,docs表示即使对于数组中声明的未定义值,也会执行map的回调,但是在创建像之前的代码之类的空数组时则不行.
所以这应该工作:
var arr = new Array(12);
for(let i = 0; i < arr.length ; i++){
arr[i] = undefined;
}
let list = arr.map( (e, i) => {
console.log(i + 1);
return i + 1;
});Run Code Online (Sandbox Code Playgroud)
所以,我们也可以这样做:
let newArray = (length) => {
let myArray = new Array(length);
for(let i = 0; i …Run Code Online (Sandbox Code Playgroud)我试图理解这些代码行之间的区别:
list(''.join(map(lambda x: str(x * 3), range(1, 4))))
Run Code Online (Sandbox Code Playgroud)
出:['3', '6', '9']正如所料.
然而:
list(''.join(map(lambda x: str(x * 5), range(1, 4))))
Run Code Online (Sandbox Code Playgroud)
产出['5', '1', '0', '1', '5'],而我预计:['5','10','15']
以同样的方式
[x for x in map(lambda x: str(x * 5), range(1, 4))]
Run Code Online (Sandbox Code Playgroud)
输出['5','10','15'].
这有什么不对?
我有一个数组数组,称为y:
y=Array(Vector{Int64}, 10)
Run Code Online (Sandbox Code Playgroud)
它基本上是一维数组(其中10个)的列表,每个1维数组的长度为5.以下是它们如何初始化的示例:
for i in 1:10
y[i]=sample(1:20, 5)
end
Run Code Online (Sandbox Code Playgroud)
每个一维阵列包括5点之间随机取样的整数1到20.
现在我施加的映射函数,其中对于每个在这些1维阵列的y,不包括从该数字1到20:
map(x->setdiff(1:20, x), y)
Run Code Online (Sandbox Code Playgroud)
不过,我想,以确保在应用的功能y[i],如果输出setdiff(1:20, y[i])包括i,i从结果中排除.换句话说,我想要一个像...一样的功能
setdiff(deleteat!(Vector(1:20),i) ,y[i])
Run Code Online (Sandbox Code Playgroud)
但随着map.
主要是我的问题是你是否可以访问map函数中的索引.
PS,我知道怎么做comprehensions,我想知道是否有可能用地图做.
理解方式:
[setdiff(deleteat!(Vector(1:20), index), value) for (index,value) in enumerate(y)]
Run Code Online (Sandbox Code Playgroud) 我有一个for循环遍历一个字符串并返回每个字符对和下一个字符:
>>> word = 'abcdef'
>>> for i in range(len(word)-1):
... print word[i:i+2]
...
ab
bc
cd
de
ef
Run Code Online (Sandbox Code Playgroud)
是否可以使用地图/滤镜组合来编写它?我在弄清楚如何获得下一个角色而不是使用时遇到了问题i+2.
我试图将这个词传递两次,将它们映射到一起,如下所示:
>>> word = 'abcdef'
>>> map(lambda x, y: x+y, word, word[1:])
Run Code Online (Sandbox Code Playgroud)
但我不确定如何避免str和None的连接错误:
>>> map(lambda x, y: x+y, word, word[1:])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
TypeError: cannot concatenate 'str' and 'NoneType' objects
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用一个array.some函数来迭代一些数据并返回我field的if语句成功.
相反,我发现的是,我得到一个布尔返回,true而不是实际变量(包含元素的详细信息).
for (var index in allFields) {
const invalidField = allFields[index].some(function (field){
if (!validation.getIn([index,field.dataset.fieldKey,'isValid'])) {
return field;
}
});
if (invalidField) {
return invalidField;
}
}
Run Code Online (Sandbox Code Playgroud)
我的代码循环allFields,其中包含索引下的字段列表.然后它将每个fieldKey数据与另一组数据进行比较validation.
field包含一个元素.我希望返回,field但是当我检查时,invalidField我得到的true不是元素
我正在尝试在不同的行上打印自相关结果的不同组成部分:
import Data.Vector as V
import Statistics.Autocorrelation
import Data.Typeable
sampleA = [1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0, 4]
main = do
let res = autocorrelation $ V.fromList sampleA
putStr "Type of result of autocorrelation test: "
print $ typeOf res
print res
-- Prelude.mapM_ print res -- not working;
Run Code Online (Sandbox Code Playgroud)
输出为:
Type of result of autocorrelation test: ((Vector Double),(Vector Double),(Vector Double))
([1.0,2.5e-2,-0.45,-0.325,0.5,0.125,-0.15],[1.0,-1.3255000000000001,-1.4039375473415425,-1.442999810318651,-1.5311377955236107,-1.5364636906417393,-1.544097864842309],[1.0,1.0755000000000001,1.1539375473415425,1.192999810318651,1.2811377955236107,1.2864636906417393,1.294097864842309])
Run Code Online (Sandbox Code Playgroud)
但是,如果取消注释最后一行,则会出现错误:
• No instance for (Foldable ((,,) (Vector Double) (Vector Double)))
arising from a use of …Run Code Online (Sandbox Code Playgroud) map-function ×10
python ×5
python-3.x ×3
arrays ×2
javascript ×2
list ×2
behavior ×1
built-in ×1
closures ×1
foldable ×1
haskell ×1
iterator ×1
julia ×1
lambda ×1
performance ×1
polymorphism ×1
rust ×1
struct ×1
types ×1