我正在通过观看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
答案 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一样订购。