Ширина столбца с плавающей запятой не такая же, как у других столбцов с использованием таблицы. ⇐ Python
-
Anonymous
Ширина столбца с плавающей запятой не такая же, как у других столбцов с использованием таблицы.
У меня есть код, в котором столбец значения probabilitas terpilih получается путем деления каждого K(x) значения пригодности на общее количество или сумму значение пригодности. Значение probabilitas terpilih имеет тип float. Проблема заключается в ширине столбца probabilitas terpilih. Вот код для столбца probabilitas terpilih:
column_widths = [0, 11, 15, 30] columns_widths_total = [0, 100, 8, 23] # Распечатываем каждую строку с исправленными вероятностями_terpilih и фиксированной шириной столбца строки_данные = [ [ f"{attr['K']:{column_widths[1]}}", f"{attr['Fitness_Value']:>{column_widths[2]}}", f"{attr['Probabilitas_Terpilih']:.4f}" ] для атрибута в хромосоме_атрибутах ] print(tabulate(rows_data, tablefmt="pipe", showindex=False)) Если необходимо, это полный код:
def store_chromosome_attributes(хромосомы, table_data_p): хромосома_атрибуты = [] headers = ["K", "Individu", "Nilai Fitness", "Probabilitas Terpilih"] print(tabulate([], tablefmt="pipe", showindex=False, headers=headers)) total_watt_values = [] total_kwh_values = [] total_fitness_values = [] для k_row в хромосомах: комбинированная_строка = [k_row[0]] individu_values = [] selected_watt_values = [] selected_kwh_values = [] для k_value, p_row в zip(k_row[1:11], table_data_p): если k_value == 1: комбинированный_row.append(k_value) if isinstance(p_row[2], (int, float)): selected_watt_values.append(p_row[2]) selected_kwh_values.append(p_row[3] * 1352) individu_values.append(str(k_value)) еще: комбинированный_row.append(k_value) individu_values.append('0') общий_ватт = сумма (выбранные_ватт_значения) total_kwh = сумма (выбранные_kwh_values) фитнес_значение = расчет_фитнес (всего_ватт) один = 1 total_watt_values.append(общее_ватт) total_kwh_values.append(total_kwh) total_fitness_values.append(fitness_value) formatted_total_kwh = format_number(total_kwh) комбинированная_строка += [общее_ватт, форматированное_общее_кВтч, фитнес_значение] хромосома_атрибуты.append({ 'К': комбинированная_строка[0], «P_values»: комбинированная_строка[1:11], «Общее_ватт»: общее_ватт, «Всего_кВтч»: total_kwh, «Фитнес_значение»: фитнес_значение, }) данные_строки = [ f"{combined_row[0]:10}", е"{fitness_value:>16}", "0,0000" ] для атрибута в хромосоме_атрибутах: attr['Probabilitas_Terpilih'] = attr['Fitness_Value'] / sum(total_fitness_values), если sum(total_fitness_values) != 0 иначе 0,0 ширина_столбца = [0, 11, 15, 30] columns_widths_total = [0, 100, 8, 23] строки_данные = [ [ f"{attr['K']:{column_widths[1]}}", f"{attr['Fitness_Value']:>{column_widths[2]}}", f"{attr['Probabilitas_Terpilih']:.4f}" ] для атрибута в хромосоме_атрибутах ] print(tabulate(rows_data, tablefmt="pipe", showindex=False)) total_row_data = ["-" * 16, "Итого", f"{sum(total_fitness_values):>{column_widths_total[2]}}", f"{one:>{column_widths_total[3]}}"] print(tabulate([total_row_data], tablefmt="pipe", showindex=False)) вернуть хромосом_атрибуты Когда я запускаю его, ширина столбца probabilitas terpilih не совпадает:
| К | Индивид | Нилай Фитнес | Вероятность терпения | |-----|------------|-----------------|------------ -------------| |:---|------------:|----------------:|-------:| | К1 | 0100010000 | 235 | 0,1632 | | К2 | 0011101000 | 0 | 0 | | К3 | 1100000001 | 480 | 0,3333 | | К4 | 0100010111 | 725 | 0,5035 | |:-----------------|:------|---------:|----------- -------------:| | ---------------- | Всего | 1440 | 1 | Вывод должен быть:
| К | Индивид | Нилай Фитнес | Вероятность терпения | |-----|------------|-----------------|------------ --------------| |:----|------------|----------------:|------------ -------------:| | К1 | 0100010000| 235 | 0,1632 | | К2 | 0011101000| 0 | 0 | | К3 | 1100000001| 480 | 0,3333 | | К4 | 0100010111| 725 | 0,5035 | |:-----------------|:------|--------:|------------ -------------:| | ---------------- | Всего | 1440| 1 |
У меня есть код, в котором столбец значения probabilitas terpilih получается путем деления каждого K(x) значения пригодности на общее количество или сумму значение пригодности. Значение probabilitas terpilih имеет тип float. Проблема заключается в ширине столбца probabilitas terpilih. Вот код для столбца probabilitas terpilih:
column_widths = [0, 11, 15, 30] columns_widths_total = [0, 100, 8, 23] # Распечатываем каждую строку с исправленными вероятностями_terpilih и фиксированной шириной столбца строки_данные = [ [ f"{attr['K']:{column_widths[1]}}", f"{attr['Fitness_Value']:>{column_widths[2]}}", f"{attr['Probabilitas_Terpilih']:.4f}" ] для атрибута в хромосоме_атрибутах ] print(tabulate(rows_data, tablefmt="pipe", showindex=False)) Если необходимо, это полный код:
def store_chromosome_attributes(хромосомы, table_data_p): хромосома_атрибуты = [] headers = ["K", "Individu", "Nilai Fitness", "Probabilitas Terpilih"] print(tabulate([], tablefmt="pipe", showindex=False, headers=headers)) total_watt_values = [] total_kwh_values = [] total_fitness_values = [] для k_row в хромосомах: комбинированная_строка = [k_row[0]] individu_values = [] selected_watt_values = [] selected_kwh_values = [] для k_value, p_row в zip(k_row[1:11], table_data_p): если k_value == 1: комбинированный_row.append(k_value) if isinstance(p_row[2], (int, float)): selected_watt_values.append(p_row[2]) selected_kwh_values.append(p_row[3] * 1352) individu_values.append(str(k_value)) еще: комбинированный_row.append(k_value) individu_values.append('0') общий_ватт = сумма (выбранные_ватт_значения) total_kwh = сумма (выбранные_kwh_values) фитнес_значение = расчет_фитнес (всего_ватт) один = 1 total_watt_values.append(общее_ватт) total_kwh_values.append(total_kwh) total_fitness_values.append(fitness_value) formatted_total_kwh = format_number(total_kwh) комбинированная_строка += [общее_ватт, форматированное_общее_кВтч, фитнес_значение] хромосома_атрибуты.append({ 'К': комбинированная_строка[0], «P_values»: комбинированная_строка[1:11], «Общее_ватт»: общее_ватт, «Всего_кВтч»: total_kwh, «Фитнес_значение»: фитнес_значение, }) данные_строки = [ f"{combined_row[0]:10}", е"{fitness_value:>16}", "0,0000" ] для атрибута в хромосоме_атрибутах: attr['Probabilitas_Terpilih'] = attr['Fitness_Value'] / sum(total_fitness_values), если sum(total_fitness_values) != 0 иначе 0,0 ширина_столбца = [0, 11, 15, 30] columns_widths_total = [0, 100, 8, 23] строки_данные = [ [ f"{attr['K']:{column_widths[1]}}", f"{attr['Fitness_Value']:>{column_widths[2]}}", f"{attr['Probabilitas_Terpilih']:.4f}" ] для атрибута в хромосоме_атрибутах ] print(tabulate(rows_data, tablefmt="pipe", showindex=False)) total_row_data = ["-" * 16, "Итого", f"{sum(total_fitness_values):>{column_widths_total[2]}}", f"{one:>{column_widths_total[3]}}"] print(tabulate([total_row_data], tablefmt="pipe", showindex=False)) вернуть хромосом_атрибуты Когда я запускаю его, ширина столбца probabilitas terpilih не совпадает:
| К | Индивид | Нилай Фитнес | Вероятность терпения | |-----|------------|-----------------|------------ -------------| |:---|------------:|----------------:|-------:| | К1 | 0100010000 | 235 | 0,1632 | | К2 | 0011101000 | 0 | 0 | | К3 | 1100000001 | 480 | 0,3333 | | К4 | 0100010111 | 725 | 0,5035 | |:-----------------|:------|---------:|----------- -------------:| | ---------------- | Всего | 1440 | 1 | Вывод должен быть:
| К | Индивид | Нилай Фитнес | Вероятность терпения | |-----|------------|-----------------|------------ --------------| |:----|------------|----------------:|------------ -------------:| | К1 | 0100010000| 235 | 0,1632 | | К2 | 0011101000| 0 | 0 | | К3 | 1100000001| 480 | 0,3333 | | К4 | 0100010111| 725 | 0,5035 | |:-----------------|:------|--------:|------------ -------------:| | ---------------- | Всего | 1440| 1 |