我想检查列表中的某个范围是否相同。例如:
在列表中,我有 function list2tree(data, opt) {
opt = opt || {};
var KEY_ID = opt.key_id || 'ID';
var KEY_PARENT = opt.key_parent || 'FatherID';
var KEY_CHILD = opt.key_child || 'children';
var EMPTY_CHILDREN = opt.empty_children;
var ROOT_ID = opt.root_id || 0;
var MAP = opt.map || {};
function getNode(id) {
var node = []
for (var i = 0; i < data.length; i++) {
if (data[i][KEY_PARENT] == id) {
for (var k in MAP) {
data[i][k] = data[i][MAP[k]];
}
if (getNode(data[i][KEY_ID]) !== undefined) {
data[i][KEY_CHILD] = getNode(data[i][KEY_ID]);
} else {
if (EMPTY_CHILDREN === null) {
data[i][KEY_CHILD] = null;
} else if (JSON.stringify(EMPTY_CHILDREN) === '[]') {
data[i][KEY_CHILD] = [];
}
}
node.push(data[i]);
}
}
if (node.length == 0) {
return;
} else {
return node;
}
}
return getNode(ROOT_ID)
}
var opt = {
"key_id": "ID", //节点的ID
"key_parent": "FatherID", //节点的父级ID
"key_child": "children", //子节点的名称
"empty_children": [], //子节点为空时,填充的值 //这个参数为空时,没有子元素的元素不带key_child属性;还可以为null或者[],同理
"root_id": 0, //根节点的父级ID
"map": { //在节点内映射一些值 //对象的键是节点的新属性; 对象的值是节点的老属性,会赋值给新属性
"value": "ID",
"label": "TypeName",
}
};
,我想看看第三,第四和第五个是否相同。
我尝试了以下方法:
[X,Y,X,X,X,Y,Y]
它可以工作,打印两次list = ['X', 'Y', 'X', 'X', 'X', 'Y']
for i in list, range(2,4):
if not i == 'X':
print("Test")
。
Test
我只是不想写一堆这样的东西:
Test
Test
... if
.... and
..... and
... and
.... {{1 }} ...
答案 0 :(得分:2)
您正在循环,以便先测试not list == 'X'
然后测试not range(2, 4) == 'X'
;显然,两者都不相等,因此您要打印两次。您的逻辑可以大大简化。如果目标是查看索引2、3和4是否都相等,则只需将列表的那一部分转换为set
并检查长度是否为1:
mylist = ['X', 'Y', 'X', 'X', 'X', 'Y'] # Changed list name; naming the list "list" leads to tears
if len(set(mylist[2:5])) == 1:
print("2, 3 and 4 equal")
else:
print("At least one not equal to the others")
您可能还希望检查mylist
是否足够长(如果切片未获得预期的三个元素,切片将不会引发错误),因为这样做只能测试列表至少为3 long元素和索引2到4中的任何元素相等(如果存在)。
答案 1 :(得分:0)
我敢肯定有更优雅的方法可以做到这一点,但是您可以尝试一下:
def check_same(mylist, start_index, end_index):
value = mylist[start_index]
for element in mylist[start_index + 1 : end_index]:
if not element == value:
return False
return True