【问题标题】:How do I check elements of the list here [closed]如何在此处检查列表的元素[关闭]
【发布时间】:2016-07-25 23:33:19
【问题描述】:

我对 Python 有点陌生。 作为我的代码的一部分,我需要一个函数来检查列表的元素,如果每个元素与它之后/之前的元素之间的差异正好为 1,则忽略它。例如:

[1,2,5,10] 无效

[9,14,19,18] 无效

[3,6,9,20] 有效

这是我的代码:

def code(self):

            for line,lists in enumerate(permutations(range(4))):
                valid_list = []
                for index,elements in enumerate(lists) :
                    if index != len(lists)-1:  #list index out of range escape condition
                        if lists[index] - lists[index+1] == 1 or lists[index+1] - lists[index] == 1 :
                            break


                    valid_list.append(lists)


            return good_items

所以我想检查“排列列表”的元素,如果它们没问题,将该列表附加到“valid_list”以进行最终返回,但我正在努力这样做。我不知道应该将有效列表放在哪里。 append(lists) 这样当我确定所有 3 个元素(最后一个不需要)都被检查时,它会追加。

我将不胜感激:3

P.s:事情是这样的,我知道算法很糟糕,实际代码也很糟糕,我只想知道如何让它工作。 改进代码的建议受到广泛赞赏,但不完全是我现在正在寻找的:3

【问题讨论】:

  • 您的问题是什么?如何检查您所描述的条件,如何附加到列表或如何使用描述性名称 code 修复函数?
  • @timgeb 我无法得到预期的结果。从该排列函数生成了 24 个列表。其中 2 个符合我的条件:[1,3,0,2] 和 [2 ,0,3,1] 但是当我运行这段代码时,我得到一个空列表,或 [3,2,1,0] (迭代完成时的最后一个列表),这两个显然都不是答案。我想知道如何解决这个问题。

标签: python list append permutation


【解决方案1】:

valid_list 的定义应该在for 循环之外,否则会被覆盖。此外,使用flag_valid 指示是否存在无效元素。试试这个代码:

from itertools import permutations 

def code():
    valid_list = []
    for line,lists in enumerate(permutations(range(4))):        
        flag_valid = True
        for index,elements in enumerate(lists):
            if index != len(lists) - 1:  #list index out of range escape condition
                if abs(lists[index] - lists[index + 1]) == 1:
                    flag_valid = False
                    break;
        if flag_valid == True:
                valid_list.append(lists)
    return valid_list

print code()

【讨论】:

  • 非常感谢。我现在知道了:3
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-08
  • 2015-08-08
  • 1970-01-01
  • 2016-01-12
  • 2012-11-25
  • 2019-10-04
  • 1970-01-01
相关资源
最近更新 更多