让if / else在列表理解中跳出一个循环,该循环遍历两个范围

我有一个列表理解,其中包含一个if else语句,该语句在两个范围内循环。

如果条件条件为假,是否可以使用列表推导来打破两个循环之一?

在我的代码示例中,我想要一个有序列表,其中包含给定字母的所有唯一组合(具有指定的最大长度),并按“我的”字母顺序排列。

import numpy as np 
import cv2 
import pyautogui 

screen_size = (1920,1080)
fourcc = cv2.VideoWriter_fourcc(*"XVID")
out = cv2.VideoWriter("INtezaar.avi",fourcc,20.0,(screen_size))
while True:
img = pyautogui.screenshot()
frame = np.array(img)
frame = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)
out.write(frame)
cv2.imshow("show",frame)
if cv2.waitKey(1) == ord("q"):
    break

这就是我得到的。

  

['A','A','A','AA','AAA','AAH','AH','AHA','AHH','H','H','H ','HA','HAA','HAH','HH','HHA','HHH']

但是我不希望重复。像这样:

  

['A','AA','AAA','AAH','AH','AHA','AHH','H','HA','HAA','HAH','HH ','HHA','HHH']

编辑:指定我想要一个有序列表。

guoyi110 回答:让if / else在列表理解中跳出一个循环,该循环遍历两个范围

您可以使用set()方法来防止所创建列表中的重复项。

这将完成工作:

print(set(my_list))
,

看看itertools.combinations

itertools.combinations(iterable,r)
     

从可迭代输入中返回元素的r长度子序列。

     

组合按字典顺序排序。因此,如果对可迭代输入进行排序,则将按排序顺序生成组合元组。

使用itertools.combinations您只能定义静态长度的组合,但是您可以将其与chain.from_iterable组合

from itertools import chain,combinations
str_min_len = 1
str_max_len = 3
my_list = ["A","H"]
result = chain.from_iterable(
   combinations(my_list,i) for i in range(str_min_len,str_max_len))

希望有帮助。

本文链接:https://www.f2er.com/3129324.html

大家都在问