如何检查列表中的范围是否相同?

时间:2018-07-09 02:15:06

标签: python

我想检查列表中的某个范围是否相同。例如: 在列表中,我有 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 }} ...

2 个答案:

答案 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