【问题标题】:how to add matrix reading from .txt to the travelling salesmen problem code?如何将 .txt 中的矩阵读取添加到旅行商问题代码中?
【发布时间】:2022-11-21 23:16:15
【问题描述】:
Hello there
I'm freshman to python . Need your help

I'm trynna read matrix from .txt and add it to the traveling salesmen problem code . Can you explain what do I do wrong? 

Input.txt looks:
Place; date1;date2;date3
#1;65;27;16
#2;46;56;11
#3;36;14;28



导入 csv

f= open("input1.txt","r")

sum=(1 for line in open("input1.txt","r"))

打印(总和)

def Min(lst, myindex):

return min(x for idx, x in enumerate(lst) if idx != myindex) 

def 删除(矩阵,索引 1,索引 2):

del matrix[index1] 

for i in matrix: 

    del i[index2] 

    return matrix 

n = 总和

矩阵 = []

高 = 0

路径长度 = 0

海峡= []

存根 = []

水库 = []

结果 = []

开始矩阵 = []

对于范围内的我(n):

Str.append(i) 

Stb.append(i) 

对于范围内的我(n):

matrix.append(map(float, row) for row in csv.reader(f,delimiter=";")) 

打印(矩阵)

对于范围内的我(n):

StartMatrix.append(matrix[i].copy()) 

对于范围内的我(1,n):

matrix[i][i] = float('inf') 

而真实的:

for i in range(1,len(matrix)): 

temp = min(matrix[i]) 

H += temp 

for j in range(1,len(matrix)): 

matrix[i][j] -= temp 

对于我在范围内(1,len(矩阵)):

temp = min(row[i] for row in matrix) 

H += temp 

for j in range(1,len(matrix)): 

    matrix[j][i] -= temp 

空最大值 = 0

索引 1 = 0

索引 2 = 0

临时工 = 0

对于我在范围内(1,len(矩阵)):

for j in range(1,len(matrix)): 

    if matrix[i][j] == 0: 

        tmp = Min(matrix[i], j)+Min((row[j] for row in matrix), i) 

            if tmp >= NullMax: 

                NullMax = tmp 

                index1 = i 

                index2 = j 

res.append(Str[index1]+1)

res.append(Stb[index2]+1)

oldIndex1 = Str[index1]

oldIndex2 = Stb[index2]

如果 Str 中的 oldIndex2 和 Stb 中的 oldIndex1:

NewIndex1 = Str.index(oldIndex2) 

NewIndex2 = Stb.index(oldIndex1) 

matrix[NewIndex1][NewIndex2] = float('inf') 

del Str[index1] 

del Stb[index2] 

matrix = Delete(matrix, index1, index2) 

while 1: 

    if len(matrix) == 1: 

        break 

对于范围内的我 (1, len(res)-1, 2):

if res.count(res[i]) < 2: 

    result.append(res[i]) 

    result.append(res[i+1]) 

    for i in range(1, len(res)-1, 2): 

        for j in range(1, len(res)-1, 2): 

            if result[len(result)-1] == res[j]: 

                result.append(res[j]) 

                result.append(res[j+1]) 

                print(result) 

对于范围内的我 (1, len(result)-1, 2):

if i == len(result)-2: 

    PathLenght += StartMatrix[result[i]-1][result[i+1]-1] 

    PathLenght += StartMatrix[result[i+1]-1][result[1]-1] 

else: 

    PathLenght += StartMatrix[result[i]-1][result[i+1]-1] 

    print(PathLenght) 

    input()



When I trynna check it shows <generator object <genexpr> at 0x038341B0>
[<generator object <genexpr> at 0x038341B0>,<generator object <genexpr> at 0x038341B0>,<generator object <genexpr> at 0x038341B0>,<generator object <genexpr> at 0x038341B0>]

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    我建议使用 pandas 读取 csv 文件(不要忘记设置非标准分隔符)。 df = pd.read_csv(file_name, sep=";")

    这是您问题的答案: https://realpython.com/introduction-to-python-generators/

    您需要先创建生成器,然后才能使用它。

    # def of generator
    def my_gen():
        i = 0
        for i in range(5):
            yield i
            i+=1
    # creating generator
    gen = my_gen()
    
    # method 1 - yields until the generator finishes 
    for num in gen:
        # do something 
    
    # method 2 - yields only once
    next(gen)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-27
      • 1970-01-01
      相关资源
      最近更新 更多