Python迭代器,可通过列表进行迭代

时间:2019-01-22 17:49:28

标签: python

我正在通过观看Pluralsight course来学习Python,并开始尝试使用迭代器和可迭代的示例。我遇到的一个我无法解释的问题是以下迭代器和可迭代的示例:

以下内容返回第一项,如果为空,则引发ValueError:

def first(iterable):
    iterator = iter(iterable)
    try:
        return next(iterator)
    except StopIteration:
        raise ValueError("iterable is empty")

该课程中的示例有效:

first({"1st","2nd","3rd"})
通过返回'1st'

,但是当我将列表的内容更改为:

first({"1","2","3"})

返回的值为'2'而不是'1'

为什么会这样?

顺便说一句,我也尝试过:

first({1,2,3})

并返回期望值: 1

1 个答案:

答案 0 :(得分:1)

您根本不使用// utilities.service.ts const focus: string = UtilitiesService.getAllFormErrors(formGroup)[0]; public static getAllFormErrors(formGroup: FormGroup): string[] { let fieldName: string[] = []; for (const value in formGroup.controls) { const ctrl = formGroup.get(value); if (ctrl instanceof FormGroup) { // tried calling recursive function here - this.getAllFormErrors(ctrl); // loop around new formControls in nested FormGroup for (const value in ctrl.controls) { const nestedCtrl = ctrl.get(value); if (nestedCtrl.errors !== null) { fieldName.push(value); } } } else if (ctrl.errors !== null) { fieldName.push(value); } } return fieldName; } // expect the 'focus' variable to return the first field throwing a validation error list{"1st","2nd","3rd"}的文字,并且set是无序的(它们以 some 的顺序进行迭代,但不是有用的顺序,甚至不一定是可重复的,跨不同的顺序一次运行的Python或set的运行方式不同。

如果您要制作set文字,请使用list,而不要使用[]{}first(["1st","2nd","3rd"])first(["1","2","3"])的行为都可以预测(分别返回first([1,2,3])"1st""1",就像1 s一样订购。