标签: enumerate

获取枚举最后一个索引值的Pythonic方法

当我枚举列表时,是否有一种预期的、Pythonic 的方式来获取提供的最后一个索引值?

相当于这样的东西:

highest = None
for index, value in enumerate(long_list):
    # do stuff with index and value
    highest = index
return highest
Run Code Online (Sandbox Code Playgroud)

我不喜欢这种做法。它有数百个不必要的变量赋值。而且,它很丑。

背景:我有一个使用 RDBS 和 SQLAlchemy 构建的有序列表,使用数字作为关系表中的索引。此外,我将最高使用的索引号存储在列表中,以便轻松附加新条目(无需在关系表上进行额外的最大查找)。当事情因为某种原因而变得混乱时,我添加了一个重组函数,该函数从 0 开始重建索引(以消除任何间隙)。我通过对关联表进行枚举迭代来实现这一点。之后,我需要对它们进行计数或最大化索引,以获得列表的新的最高索引值。这有点让我烦恼。

建议?最好能在 2.7 中工作。

python enumerate

2
推荐指数
1
解决办法
9363
查看次数

如何检查列表中的所有整数是否连续?

我正在尝试编写一个程序,如果其中的所有数字list都是连续的,则该程序将打印“YES”,如果数字不连续,则应返回“NO”。我所说的连续是指列表中的每个数字都应该大于前一个元素的数字。

例如:

  • 它应该为输入打印“YES”:[3, 4, 5], [7, 8, 9], [1, 2, 3], [0, 1, 2, 3, 4, 5].. 等

  • 它应该为输入打印“NO”:[9, 1, 0], [3, 2, 4], [5, 5], [9, 8, 2, 3, 7].. 等

我用于enumerate此目的。

这是我的代码:

    inp=[1,2,3,4,5]
    flag=0
    for index,e in enumerate(inp): 
        if index!=len(inp)-1:    
            if inp[index+1]==inp[index]+1:
                flag=1
    if flag==1:
        print ("YES")
    else:
        print ("NO")
Run Code Online (Sandbox Code Playgroud)

该代码工作正常,但我发现它是多余的。
有没有更好的方法来使用枚举或不使用枚举?

python for-loop enumerate python-3.x

2
推荐指数
1
解决办法
3440
查看次数

OCaml 中 Python 枚举函数最简单的模拟是什么?

在 Python 中枚举的工作原理如下:

a_list = ['a', 'b', 'c']
    
for i, x in enumerate(a_list): 
    print(i, x)
Run Code Online (Sandbox Code Playgroud)

输出将是:

0 a
1 b
2 c
Run Code Online (Sandbox Code Playgroud)

因此, enumerate 实际上返回一个 (i, x) 形式对的生成器(几乎是一个惰性序列),其中 i 的范围超过 0, 1, 2, ...,x 是列表中按顺序排列的元素。

到目前为止,我已经提出了列表的定义,它不会产生“生成器”,但也会产生一个对的列表:


let enumerate (a_list: 'a list): (int * 'a) list =
  let rec _enumerar (a_list: 'a list) (accum: (int * 'a) list) (i: int): (int * 'a) list =
    match a_list with
    | [] -> accum
    | x::xs -> _enumerar  xs ((i, x)::accum) (i+1)
  in …
Run Code Online (Sandbox Code Playgroud)

python ocaml list enumerate lazy-sequences

2
推荐指数
1
解决办法
433
查看次数

Python - 为什么 enumerate() 导致稍后的 zip() 仅从列表中的最后一项提取?

代码:

boylist = ['Jim', 'James', 'Jack', 'John', 'Jason']
for i, boylist in enumerate(boylist):
    print(f'Index {i} is {boylist} in my list')
#boylist = ['Jim', 'James', 'Jack', 'John', 'Jason']
girllist = ['Emma', 'Clara', 'Susan', 'Jill', 'Lisa']
for boylist, girllist in zip(boylist, girllist):
    print(f'{boylist} and {girllist} form a nice couple')\
Run Code Online (Sandbox Code Playgroud)

输出:

Index 0 is Jim in my list
Index 1 is James in my list
Index 2 is Jack in my list
Index 3 is John in my list
Index 4 is Jason …
Run Code Online (Sandbox Code Playgroud)

python string list enumerate python-zip

2
推荐指数
1
解决办法
53
查看次数

Enumerate如何在MonoTouch中工作?

在MonoTouch中,我需要处理NSSet中的每个对象.我使用Enumerate的尝试如下:

public override void ReturnResults ( BarcodePickerController picker, NSSet results )
{
    var n = results.Count;  // Debugging - value is 3
    results.Enumerate( delegate( NSObject obj, ref bool stop ) 
    {
        var foundCode = ( obj as BarcodeResult ); // Executed only once, not 3 times
        if ( foundCode != null )
        {
            controller.BarcodeScannedResult (foundCode);
        }
    });
// Etc
}
Run Code Online (Sandbox Code Playgroud)

虽然在结果中使用三个对象调用该方法,但在委托中只处理一个对象.我本来希望代表被执行三次,但我必须错误地了解它是如何工作的.

无法找到任何文档或示例.任何建议都非常感谢.

enumerate nsset xamarin.ios

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

使用NSMutableSet时出错

我收到了错误

*由于未捕获的异常'NSGenericException'终止应用程序,原因:'* Collection <__ NSCFSet:0x6b66390>在枚举时发生了变异.

向我的班级添加新的委托时.或者至少,这就是我认为问题所在.

这是我的代码:MyAppAPI.m

[...]
static NSMutableSet *_delegates = nil;

@implementation MyAppAPI

+ (void)initialize
{
    if (self == [MyAppAPI class]) {
        _delegates = [[NSMutableSet alloc] init];
    }
}

+ (void)addDelegate:(id)delegate
{
    [_delegates addObject:delegate];
}

+ (void)removeDelegate:(id)delegate
{
    [_delegates removeObject:delegate];
}
[...]

@end
Run Code Online (Sandbox Code Playgroud)

MyAppAPI是一个单例,我可以在整个应用程序中使用它.无论我在哪里(或应该能够)做到:[MyAppAPI addDelegate:self].
这很有效,但仅限于第一个视图.该视图有一个带有PageViewController的UIScrollView,它可以在其自身中加载新视图.这些新视图注册到MyAppAPI以收听消息,直到它们被卸载(在这种情况下,它们执行了操作removeDelegate).但是,在我看来,它在UIScrollView中的第二个视图上执行了addDelegate之后直接死了.

我怎么能改进代码,以免发生这种情况?

更新
我想进一步澄清一下.会发生什么是视图控制器"StartPage"具有带页面控制器的UIScrollView.它加载了几个其他视图(在当前可见屏幕之前1个).每个视图都是一个instans PageViewController,它使用上面显示的addDelegate函数将自身注册到名为MyAppAPI的全局单例.但是,据我所知,当viewcontroller 2注册自己时,这个viewcontroller 1仍在从委托中读取,因此错误显示在上面.

我希望我能清楚地说明这一点.我尝试过一些东西,但没有任何帮助.我需要使用addDelegate向代理注册,即使在从代理中读取时也是如此.我怎么做?

更新2 这是一个响应方法:

+ (void)didRecieveFeaturedItems:(NSArray*)items
{   
    for (id delegate in _delegates)
    {
        if ([delegate respondsToSelector:@selector(didRecieveFeaturedItems:)])
            [delegate didRecieveFeaturedItems:items];
    }
}
Run Code Online (Sandbox Code Playgroud)

iphone xcode objective-c enumerate ios

1
推荐指数
2
解决办法
2286
查看次数

powershell get-childitem到csv的详细信息

我正在尝试为具有深层文件夹结构的文件共享创建CSV文件.

我希望CSV看起来像:

filename, filepath, file type, folderStructure
Run Code Online (Sandbox Code Playgroud)

到目前为止,我有以下内容:

#Get-ChildItem -Path D:\ -Recurse
$directory="d:\"
gci $directory -recurse |
where {$_.psiscontainer} |
foreach {
    get-childitem $_.fullname |
    sort creationtime |
    select -expand fullname -last 1
}
Run Code Online (Sandbox Code Playgroud)

directory powershell enumerate

1
推荐指数
1
解决办法
2万
查看次数

将此列表拆分为较小列表的最佳方法是什么?

我一直试图绕过最好的方法来分割这些已经订购的数字列表但是分成几部分.例如:

data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 29, 30, 31, 32, 33, 35, 36, 44, 45, 46, 47]
Run Code Online (Sandbox Code Playgroud)

我希望输出是这个..

sliced_data = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19],[29, 30, 31, 32, 33],[35, 36],[44, 45, 46, 47]]
Run Code Online (Sandbox Code Playgroud)

我一直在尝试,直到它是空的,但这不是很好..

编辑:

for each_half_hour in half_hour_blocks:
    if next_number != each_half_hour:
        skippers.append(half_hour_blocks[:next_number])
        del half_hour_blocks[:next_number]

    next_number = …
Run Code Online (Sandbox Code Playgroud)

python split list enumerate

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

你能为多个对象使用枚举吗?

我想知道是否说我在python中定义了两个(或者甚至更多)字典,带有一些键和相应的数据,我可以使用枚举语句访问这两个元素吗?:

for i, key1, key2 in enumerate(dict1,dict2)
... "do something"
Run Code Online (Sandbox Code Playgroud)

谢谢!

python enumerate

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

当句子不在句子中时,不能得到程序打印"不在句子里"

我有一个程序,要求输入一个句子,然后要求一个单词,并告诉你该单词的位置:

sentence = input("enter sentence: ").lower()
askedword = input("enter word to locate position: ").lower()
words = sentence.split(" ")

for i, word in enumerate(words):
     if askedword == word :
          print(i+1)
    #elif keyword != words :
         #print ("this not")
Run Code Online (Sandbox Code Playgroud)

但是当我编辑它时,我无法使程序正常工作,如果输入的单词不在句子中,则打印"这不在句子中"

python words enumerate python-3.x sentence

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