如何在 Python 中将第一行与每个剩余行连接起来,第二行与每个剩余行下方连接 7 个循环?
How to concatenate first row with each remaining rows and second row with below each remaining rows for 7 cycles in Python?
我一直在想一些不同的连接解决方案
- 用每一行迭代第一行直到最后 (n)。
- 在第 1 步之后,用剩余的每一行迭代第二行。所以在第 3 行直到 n(最后一行)-1 被称为第一个周期。
- 类似于第二个循环,它是前两行与第 3 行的组合。
下面是 示例输出,我想将其加载到 Excel 或 CSV 当我输入 ['A','B','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])
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)
我一直在想一些不同的连接解决方案
- 用每一行迭代第一行直到最后 (n)。
- 在第 1 步之后,用剩余的每一行迭代第二行。所以在第 3 行直到 n(最后一行)-1 被称为第一个周期。
- 类似于第二个循环,它是前两行与第 3 行的组合。
下面是 示例输出,我想将其加载到 Excel 或 CSV 当我输入 ['A','B','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])
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)