【问题标题】:How to concatenate first row with each remaining rows and second row with below each remaining rows for 7 cycles in Python?python - 如何在Python中将第一行与每个剩余的行连接起来,将第二行与每个剩余的行连接起来7个周期?
【发布时间】:2021-01-25 19:06:38
【问题描述】:

我一直在尝试一些不同的连接方式

  1. 用每一行迭代第一行直到最后一个(n)。
  2. 在第 1 步之后,用剩余的每一行迭代第二行。所以在第 3 行直到 n(最后一行)​​-1 被称为第一个循环。
  3. 第二个循环也是如此,即前两行与第三行的组合。

下面是 示例输出,当我输入 ['A','B' 时,我希望将其加载到 ExcelCSV 中,'C','D','E','F','G'].

1_cycle     2_cycle     3_cycle     4_cycle       5_cycle         6_cycle
 A&B          A,B&C     A,B,C&D    A,B,C,D&E     A,B,C,D,E&F    A,B,C,D,E,F&G
 A&C          A,B&D     A,B,C&E    A,B,C,D&F     A,B,C,D,E&G    
 A&D          A,B&E     A,B,C&F    A,B,C,D&G     B,C,D,E,F&G    
 A&E          A,B&F     A,B,C&G    B,C,D,E&F        
 A&F          A,B&G     A,B,C&E    B,C,D,E&G        
 A&G          A,C&D     A,B,C&F    C,D,E,F&G        
 B&C          A,C&E     A,B,C&G         
 B&D          A,C&F     A,B,C&F         
 B&E          A,C&G     A,B,C&G         
 B&F          A,D&E     B,C,D&E         
 B&G          A,D&F     B,C,D&F         
 C&D          A,D&G     B,C,D&G         
 C&E          A,E&F     C,D,E&F         
 C&F          A,E&G     C,D,E&G         
 C&G          A,F&G     D,E,F&G         
 D&E          B,C&D             
 D&F          B,C&E             
 D&G          B,C&F             
 E&F          B,C&G             
 E&G          C,D&E             
 F&G          C,D&F             
              C,D&G             
              D,E&F             
              D,E&G             
              E,F&G

到目前为止,我能够破解第一个循环。只是到了第二个周期和第三个周期我遇到了麻烦。

目前,我在下面有这段代码,它适用于第一个周期。

import pandas as pd
import time
import os
import csv

links=['A','B','C','D','E','F','G']
len = len(links)

A=0
B=1
csvfile = open('permutation_loop.csv', 'a',encoding='utf-8')
csvwriter = csv.writer(csvfile)

for i in links:
    first = i
    A+=1
    #print(first)
    for j in links[A:]:
        second = j
        B+=1
        first_cycle = first+second
        #print(second)
        #csvwriter.writerow([first_cycle.strip()])
        for k in links[B:]:
            third = k
            #print(third)
            second_cycle = first+second+third
            print(second_cycle)
            csvwriter.writerow([first_cycle,second_cycle])

【问题讨论】:

    标签: python loops nested-loops


    【解决方案1】:
    import csv
    
    
    def one_cycle(original_inputs, previous_step):
        for i, x in previous_step:
            for j in range(i + 1, len(original_inputs)):
                yield (j, x + [original_inputs[j]])
    
    
    def many_cycles(original_inputs, num_cycles):
        strings = [(i, [letter]) for i,letter in enumerate(original_inputs)]
        for i in range(num_cycles):
            strings = list(one_cycle(original_inputs, strings))
            yield (letter for index, letter in strings)
    
    
    def insert_comma_ampersand(inp):
        # transforms ['A','B','C','D'] to 'A,B,C&D'
        comma_part = ','.join(inp[:-1])
        return f'{comma_part}&{inp[-1]}'
    
    
    def make_permutations_csv(letters, num_cycles):
        csv_file = open('permutation_loop.csv', 'w', encoding='utf-8')
        csv_writer = csv.writer(csv_file, lineterminator='\n')
    
        csv_writer.writerow([f'{i+1}_cycle' for i in range(num_cycles)])
    
        columns = list(many_cycles(letters, num_cycles))
        while not all(column is None for column in columns):
            row = []
            for i, column in enumerate(columns):
                if column is None:
                    row.append('')
                    continue
    
                try:
                    row.append(insert_comma_ampersand(next(column)))
                except StopIteration:
                    row.append('')
                    columns[i] = None
            csv_writer.writerow(row)
    
        csv_file.close()
    
    
    make_permutations_csv(['A', 'B', 'C', 'D', 'E', 'F', 'G'], 6)
    

    【讨论】:

    • 代码按要求工作。感谢您的代码。输出有微小的变化。因为我想在每个输出之后添加“,”,在最后一个字符之前添加“&”。当我编辑示例输出格式时。而且我还想将输出保存在 excel 中的单独列中,就像示例输出一样。
    • @bharath 您可以编辑问题以了解您希望 CSV 文件的外观吗?也许每行一个周期?另外,输入行是否应该包含在 CSV 中?
    • 我已经重新编辑了这个问题,因为我想将输出加载/保存到 Excel 或 CSV 中,与有问题的示例输出等标题相同。
    • 非常感谢@Oli,我真的很感激。代码符合确切要求。
    • 我面临一个小问题,当我输入 ['Blue','Black','White',3] 时。输出为 B,l,u,e,B,l,a,c&K(1_cycle) 其中 ',' & '&' 用于每个字母,因为我需要 ',' & '&' 用于每个字母像 Blue&Black(1_cycle) , Blue,Black&White(2_Cyle) 这样的词。
    猜你喜欢
    • 2019-05-31
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多