【问题标题】:How do I take the combinations of list elements?如何获取列表元素的组合?
【发布时间】:2021-08-17 05:14:31
【问题描述】:

我试图在不使用任何预定义库的情况下找出元素的组合。 在下面的代码中,我根据第一个元素找到组合,但我也想找出其他所有元素!

代码:

a = [20, 22, 30, 45, 50]
new_list = []
i = a[0]
for i in range(len(a)-1):
    new_list.append((a[i] , a[i + 1]))
new_list

仅输出单个元素 a[0]:

[(20, 20), (20, 22), (20, 30), (20, 45), (20, 50)]

预期输出:

[(20, 22), (20, 30), (20, 45), (20, 50)]
[(22, 20), (22, 30), (22, 45), (22, 50)]
              .
              .

【问题讨论】:

  • 有什么理由不使用预定义库? itertools 非常适合这种情况
  • 要求我们不能使用任何预定义的库,否则太容易了!
  • a = [20, 22, 30, 45, 50];l = [];对于 a 中的 i: 对于 a 中的 j: l +=[(i,j)] ;打印(l)
  • 你的回答是对的,@VisheshMangla 谢谢
  • 那个循环没有输出你显示的内容...请发一个正确的minimal reproducible example

标签: python list combinations


【解决方案1】:

这是不使用任何预定义库

的解决方案
a = [20, 22, 30, 45, 50]
new_list = []

for i, item in enumerate(a):

    sub_list = []

    for j, second_item in enumerate(a):
        if i == j:
            continue
        sub_list.append((a[i] , a[j]))

    new_list.append(sub_list)

print(new_list)

输出将是:

[[(20, 22), (20, 30), (20, 45), (20, 50)],
[(22, 20), (22, 30), (22, 45), (22, 50)],
[(30, 20), (30, 22), (30, 45), (30, 50)],
[(45, 20), (45, 22), (45, 30), (45, 50)],
[(50, 20), (50, 22), (50, 30), (50, 45)]]

编辑: 如果您不想要像 (20, 22) (22,20) 这样的重复项,请这样做:

a = [20, 22, 30, 45, 50]
new_list = []

for i, item in enumerate(a):

    sub_list = []

    for j, second_item in enumerate(a):
        if i == j or j < i:
            continue
        sub_list.append((a[i] , a[j]))
    if sub_list != []:
        new_list.append(sub_list)

print(new_list)

输出将是:

[[(20, 22), (20, 30), (20, 45), (20, 50)],
 [(22, 30), (22, 45), (22, 50)], [(30, 45), (30, 50)],
 [(45, 50)]]

【讨论】:

    【解决方案2】:
    a = [20, 22, 30, 45, 50]
    combined_list = []
    
    for first_element in a:
        new_list = []
        for second_element in a:
            if first_element != second_element:
                new_list.append((first_element, second_element))
    
        combined_list.append(new_list)
    

    【讨论】:

      【解决方案3】:
      from itertools import combinations
      a = [20, 22, 30, 45, 50]
      comb = combinations(a, 2)
       
      lis_comb = []
      for i in list(comb):
          lis_comb.append(i)
      print(lis_comb)
      
        [(20, 22), (20, 30), (20, 45), (20, 50), (22, 30), (22, 45), (22, 50), (30, 45), (30, 50), (45, 50)]
      

      【讨论】:

      • 他问without using any predefined library.
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-12
      • 2015-07-29
      • 2011-01-25
      相关资源
      最近更新 更多