让if/else在循环两个范围的列表中从一个循环中跳出

2024-05-19 17:03:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含if-else语句的列表,它在两个范围内循环

当if条件测试为false时,是否可以使用列表理解来中断两个循环中的一个

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

str_len = 3
my_list = ["A", "H"]
alphabet = [" ", "A", "H"]
for i in range(str_len-1):
    my_list = [i+j if i[-1] != " " else i for i in my_list for j in alphabet]
print(my_list)

这就是我得到的

['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']

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


Tags: in列表forlenifmyelselist
2条回答

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

这将完成以下工作:

print(set(my_list))

看看itertools.combinations

itertools.combinations(iterable, r)

Return r length subsequences of elements from the input iterable.

Combinations are emitted in lexicographic sort order. So, if the input iterable is sorted, the combination tuples will be produced in sorted order.

使用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))

希望有帮助

相关问题 更多 >