Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果嵌套列表项的顺序相同,但从不同的索引开始,如何从python列表中删除它们_Python - Fatal编程技术网

如果嵌套列表项的顺序相同,但从不同的索引开始,如何从python列表中删除它们

如果嵌套列表项的顺序相同,但从不同的索引开始,如何从python列表中删除它们,python,Python,如何从嵌套列表中删除“循环相似”列表。如果两个列表在循环旋转后相同,则它们“循环相似”。例如 [1,2,3,4]与[3,4,1,2]循环相似,因为[1,2,3,4]旋转2是[3,4,1,2] 假设我有以下列表: list=[[1,1,0]、[0,1,1]、[1,1,1]] 我想将[0,1,1]删除,因为它在旋转2后与[1,1,0]循环相似。我应该如何处理这个问题?您首先需要检查两个列表在轮换下是否相同 # not very efficient algorithm but it works #

如何从嵌套列表中删除“循环相似”列表。如果两个列表在循环旋转后相同,则它们“循环相似”。例如
[1,2,3,4]
[3,4,1,2]
循环相似,因为
[1,2,3,4]
旋转2是
[3,4,1,2]

假设我有以下列表:

list=[[1,1,0]、[0,1,1]、[1,1,1]]

我想将
[0,1,1]
删除,因为它在旋转2后与
[1,1,0]
循环相似。我应该如何处理这个问题?

您首先需要检查两个列表在轮换下是否相同

# not very efficient algorithm but it works
# you can also import deque from collections for rotation operation

def is_circular_equal(a,b):
   if len(a) != len(b):
      return False  # if they are not of equal length
   for i in range(len(a)):
      if b == a[i:]+a[:i]:
         return True
   return False   
这是另一篇关于如何做到这一点的帖子


然后在列表中循环检查每个列表是否与另一个列表相等。首先需要检查两个列表在旋转时是否相同

# not very efficient algorithm but it works
# you can also import deque from collections for rotation operation

def is_circular_equal(a,b):
   if len(a) != len(b):
      return False  # if they are not of equal length
   for i in range(len(a)):
      if b == a[i:]+a[:i]:
         return True
   return False   
这是另一篇关于如何做到这一点的帖子

然后在列表中循环检查每个列表是否与另一个相同,我会做如下操作:

xs = [[1, 1, 0], [0, 1, 1], [1, 1, 1]]                                                                                                                                                              

sorted_list = list(map(lambda x: sorted(x), xs))

final_list = []

for x in sorted_list:

    if x in final_list:
        continue
    final_list.append(x)

我会这样做:

xs = [[1, 1, 0], [0, 1, 1], [1, 1, 1]]                                                                                                                                                              

sorted_list = list(map(lambda x: sorted(x), xs))

final_list = []

for x in sorted_list:

    if x in final_list:
        continue
    final_list.append(x)

下面是一个糟糕的解决方案(二次复杂性):


对于一个好的解决方案,我会考虑是否可以为每个旋转相同的列表生成一个唯一的值,然后将该值用作一个集合的元素来测试其存在性。

这是一个糟糕的解决方案(二次复杂性):




对于一个好的解决方案,我会考虑是否可以为每个旋转的相同列表生成一个唯一的值,然后将该值用作集合的一个元素来测试是否存在。

如何将
[0,1,1]
[1,1,0]
的顺序相同?这是否回答了您的问题@ChayimFriedman将其视为一种模,如果你将索引移动1,你将得到相同的列表。否@Countour integration不要覆盖内置的
列表
如何将
[0,1,1]
[1,1,0]
的顺序相同?这回答了你的问题吗@ChayimFriedman将其视为一种模,如果你将索引移动1,你将得到相同的列表。不@Countour integral不要覆盖内置的
list
可能被视为超出范围,但我至少会确保它们具有相同的长度。使用
collections.deque
更好,特别是如果有多个包含许多元素的列表。看@l3via,我不想让代码变长。但有必要检查它们是否具有相同的长度,并返回False,否则可能会被视为超出范围,但我至少会确保它们具有相同的长度。使用
collections.deque
更好,尤其是如果有多个包含多个元素的列表。看@l3via,我不想让代码变长。但有必要检查它们是否具有相同的长度,并返回False。否则,这不会解决上述问题,但会比较无序列表(已在中介绍)。这不会解决上述问题,但会比较无序列表(已在中介绍)让子列表colection.deques有帮助吗?我想这会有助于降低旋转的成本,但不会解决嵌套for循环的问题。它是二次的,即使你假设旋转的eq是O(1)。如果你按列表长度划分组会更好。复杂度最好的方法是使用元组和集合。转换(列表->元组->返回列表)可能会更昂贵,但如果有许多列表,这仍然可能更昂贵better@ChayimFriedman当然但这并没有改变渐近复杂性,这就是为什么我认为它是过早的优化。一旦主要问题得到解决(为每个列表生成一个键值),这可能就没有必要了。它是否有助于使子列表合并。deques?我想这将有助于降低旋转的成本,但它不会解决嵌套for循环的问题。它是二次的,即使你假设旋转的eq是O(1)。如果你按列表长度划分组会更好。复杂度最好的方法是使用元组和集合。转换(列表->元组->返回列表)可能会更昂贵,但如果有许多列表,这仍然可能更昂贵better@ChayimFriedman当然但这并没有改变渐近复杂性,这就是为什么我认为它是过早的优化。一旦主要问题得到解决(为每个列表生成一个键值),这可能就没有必要了。