我搜索了一会儿,但没有找到任何解释我正在尝试做什么的东西.
基本上我有一个字符串"标签"列表,例如["棕色","黑色","蓝色","棕色","棕色","黑色"]等.我想要做的是将其转换为列表每个标签对应一个整数的整数,所以
["brown", "black", "blue", "brown", "brown", "black"]
Run Code Online (Sandbox Code Playgroud)
变
[1, 2, 3, 1, 1, 2]
Run Code Online (Sandbox Code Playgroud)
我查看了枚举函数,但是当我给它我的字符串列表(这很长)时,它为每个单独的标签分配了一个int,而不是给同一个标签提供相同的int:
[(1,"brown"),(2,"black"),(3,"blue"),(4,"brown"),(5,"brown"),(6,"black")]
Run Code Online (Sandbox Code Playgroud)
我知道如何用一个冗长而繁琐的for循环和if-else检查来做到这一点,但我真的很好奇,如果只有一两行就有更优雅的方式来做这件事.
我遇到了在选定元素上使用枚举器形成可迭代(即序列或迭代器或类似物)的情况,并希望返回原始索引而不是默认索引count,从 开始0一直到len(iterable) - 1.
一种非常幼稚的方法是声明一个名为的新生成器对象_enumerate()
>>> def _enumerate(iterable, offset = 0, step = 1):
index = offset
for element in iterable:
yield index, element
index += step
Run Code Online (Sandbox Code Playgroud)
...一个新的列表对象months。
>>> months = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"]
Run Code Online (Sandbox Code Playgroud)
使用蟒蛇在积聚enumerate功能会产生这种输出的[5::2]切片:
>>> …Run Code Online (Sandbox Code Playgroud) 怎么枚举不产生序列?
----> 1 BytesInt('1B')
12 def BytesInt(s):
13 suffixes = ['B','KB','MB','GB','TB','PB','EB','ZB','YB']
---> 14 for power,suffix in reversed(enumerate(suffixes)):
15 if s.endswith(suffix):
16 return int(s.rstrip(suffix))*1024**power
TypeError: argument to reversed() must be a sequence
Run Code Online (Sandbox Code Playgroud) 我有一个包含主密钥和列表列表的列表,其中每个封闭列表的第一个值(如'key_01')应该是相应值的子键(如'val_01', 'val_02').数据显示在这里:
master_keys = ["Master_01", "Master_02", "Master_03"]
data_long = [[['key_01','val_01','val_02'],['key_02','val_03','val_04'], ['key_03','val_05','val_06']],
[['key_04','val_07','val_08'], ['key_05','val_09','val_10'], ['key_06','val_11','val_12']],
[['key_07','val_13','val_14'], ['key_08','val_15','val_16'], ['key_09','val_17','val_18']]]
Run Code Online (Sandbox Code Playgroud)
我希望将这些列表组合成字典字典,如下所示:
master_dic = {
"Master_01": {'key_01':['val_01','val_02'],'key_02': ['val_03','val_04'], 'key_03': ['val_05','val_06']},
"Master_02": {'key_04': ['val_07','val_08'], 'key_05': ['val_09','val_10'], 'key_06': ['val_11','val_12']},
"Master_03": {'key_07': ['val_13','val_14'], ['key_08': ['val_15','val_16'], 'key_09': ['val_17','val_18']}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止我得到的是子词:
import itertools
master_dic = {}
servant_dic = {}
keys = []
values = []
for line in data_long:
for item in line:
keys.extend(item[:1])
values.append(item[1:])
servant_dic = dict(itertools.izip(keys, values))
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,它会输出一本字典.
servant_dic = {
'key_06': ['val_11','val_12'], …Run Code Online (Sandbox Code Playgroud) 所以我有一个 2D numpy 数组 (256,256),包含 0 到 10 之间的值,它本质上是一个图像。我需要删除 0 值并将它们设置为 NaN,以便我可以使用特定库 (APLpy) 绘制数组。但是,每当我尝试更改所有 0 值时,其他一些值都会被更改,在某些情况下会更改为原始值的 100 倍(不知道为什么)。
我正在使用的代码是:
for index, value in np.ndenumerate(tex_data):
if value == 0:
tex_data[index] = 'NaN'
Run Code Online (Sandbox Code Playgroud)
其中 tex_data 是我需要从中删除零的数据数组。不幸的是,我不能只对不需要的值使用掩码,因为据我所知,除了掩码数组之外,APLpy 不会。
无论如何我可以将 0 值设置为 NaN 而不更改数组中的其他值?
为什么这段非常简单的代码会在 Julia 1.1 中导致错误?
Threads.@threads for (index,value) in enumerate([0.1,0.2,0.3])
println(value^index)
end
Run Code Online (Sandbox Code Playgroud)
显示的错误是:
Error thrown in threaded loop on thread 0: MethodError(f=typeof(Base.unsafe_getindex)(), args=(Base.Iterators.Enumerate{Array{Float64, 1}}(itr=Array{Float64, (3,)}[0.1, 0.2, 0.3]), 1), world=0x00000000000069dc)
Error thrown in threaded loop on thread 1: MethodError(f=typeof(Base.unsafe_getindex)(), args=(Base.Iterators.Enumerate{Array{Float64, 1}}(itr=Array{Float64, (3,)}[0.1, 0.2, 0.3]), 3), world=0x00000000000069dc)
Run Code Online (Sandbox Code Playgroud)
我想在使用迭代器的Threads.@threads地方使用更复杂的代码enumerate。
我有一个枚举,其中包含逐渐传入的服务调用的响应。
ToList对可枚举进行操作,因为这会阻塞,直到收到所有响应,而不是在收到响应时列出它们。 如何获取可枚举的第一个元素并返回可枚举的延续?我无法使用迭代器方法,因为出现编译错误:
迭代器不能有 ref、in 或 out 参数。
我试过这段代码:
public IEnumerable<object> GetFirstAndRemainder(IEnumerable<object> enumerable, out object first)
{
first = enumerable.Take(1).FirstOrDefault();
return enumerable.Skip(1); // Second interation - unexceptable
}
// This one has a compilation error: Iterators cannot have ref, in or out parameters
public IEnumerable<object> GetFirstAndRemainder2(IEnumerable<object> enumerable, out object first)
{
var enumerator = enumerable.GetEnumerator();
enumerator.MoveNext();
first = enumerator.Current;
while (enumerator.MoveNext())
{
yield return enumerator.Current;
}
}
Run Code Online (Sandbox Code Playgroud) 为了支持对集合的索引,Python包含enumerate()函数.它提供了收集索引.
for index, item in enumerate(list):
# do domething
print index
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我有一个巨大的列表,并想知道使用enumerate()手动创建索引是否更快?例如
index = 0
for item in list:
# do something
print index
index = index + 1
Run Code Online (Sandbox Code Playgroud) 我有一个多维的numpy数组,我想迭代.我希望不仅能够访问值,还能访问它们的索引.不幸,
for idx,val in enumerate(my_array):
Run Code Online (Sandbox Code Playgroud)
当my_array是多维的时候似乎不起作用.(我希望idx成为一个元组).嵌套for循环可能有效,但我不知道数组的维数,直到运行时,我知道它不适合python.我可以想到很多方法(递归,自由使用%运算符),但这些都不是'python-esque'.有一个简单的方法吗?
我想做
ls = [myfunc(a,b,i) for a in a_list for b in b_list]
Run Code Online (Sandbox Code Playgroud)
但也传入imyfunc,这是一个从0开始的索引,并为每个新元素递增.
例如:
a_list = 'abc'
b_list = 'def'
Run Code Online (Sandbox Code Playgroud)
应该导致
ls = [myfunc('a','d',0),
myfunc('a','e',1),
myfunc('a','f',2),
myfunc('b','d',3),
myfunc('b','e',4),
...
myfunc('c','f',8]
Run Code Online (Sandbox Code Playgroud)
我知道我可以enumerate()用于正常情况,即.
ls = [myfunc(a,i) for a,i in enumerate(a_list)]
Run Code Online (Sandbox Code Playgroud)
但是,当有两个fors 时,我无法弄清楚如何干净利落地做到这一点.我以前找不到这个问题.
enumerate ×10
python ×8
list ×2
numpy ×2
arrays ×1
c# ×1
dictionary ×1
enumerator ×1
for-loop ×1
generator ×1
ienumerable ×1
int ×1
iterator ×1
julia ×1
matrix ×1
python-3.x ×1
reverse ×1
string ×1