标签: enumerate

Python:将一个字符串'keys'列表为int

我搜索了一会儿,但没有找到任何解释我正在尝试做什么的东西.

基本上我有一个字符串"标签"列表,例如["棕色","黑色","蓝色","棕色","棕色","黑色"]等.我想要做的是将其转换为列表每个标签对应一个整数的整数,所以

["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检查来做到这一点,但我真的很好奇,如果只有一两行就有更优雅的方式来做这件事.

python string int enumerate

4
推荐指数
1
解决办法
3363
查看次数

如何从可迭代的保留原始索引中枚举所选元素?

我遇到了选定元素上使用枚举器形成可迭代(即序列迭代器或类似物)的情况,并希望返回原始索引而不是默认索引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)

python generator enumerate python-3.x

4
推荐指数
1
解决办法
2172
查看次数

TypeError:reversed()的参数必须是序列

怎么枚举不产生序列?

----> 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)

python reverse enumerate

4
推荐指数
1
解决办法
7000
查看次数

嵌套列表的嵌套列表

我有一个包含主密钥和列表列表的列表,其中每个封闭列表的第一个值(如'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)

python dictionary list enumerate

4
推荐指数
1
解决办法
97
查看次数

在 numpy 数组中更改值

所以我有一个 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 而不更改数组中的其他值?

python arrays numpy enumerate

4
推荐指数
1
解决办法
1403
查看次数

多线程 Julia 显示枚举迭代器错误

为什么这段非常简单的代码会在 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

multithreading iterator for-loop enumerate julia

4
推荐指数
1
解决办法
509
查看次数

获取 IEnumerable 的第一项,并将其余项作为 IEnumerable 返回,仅迭代一次

我有一个枚举,其中包含逐渐传入的服务调用的响应。

  • 我无法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)

c# ienumerable enumerate enumerator

4
推荐指数
1
解决办法
1218
查看次数

enumerate()函数是否提前计算元素?

为了支持对集合的索引,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)

python list enumerate

3
推荐指数
1
解决办法
2524
查看次数

迭代未知维度的numpy矩阵

我有一个多维的numpy数组,我想迭代.我希望不仅能够访问值,还能访问它们的索引.不幸,

for idx,val in enumerate(my_array):
Run Code Online (Sandbox Code Playgroud)

当my_array是多维的时候似乎不起作用.(我希望idx成为一个元组).嵌套for循环可能有效,但我不知道数组的维数,直到运行时,我知道它不适合python.我可以想到很多方法(递归,自由使用%运算符),但这些都不是'python-esque'.有一个简单的方法吗?

python numpy enumerate matrix

3
推荐指数
1
解决办法
2513
查看次数

如何用两个'for'列举列表理解?

我想做

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 时,我无法弄清楚如何干净利落地做到这一点.我以前找不到这个问题.

python list-comprehension enumerate

3
推荐指数
2
解决办法
317
查看次数