【问题标题】:How to print a list with the index numbers (python)?如何打印带有索引号的列表(python)?
【发布时间】:2015-01-11 01:10:05
【问题描述】:

好的,我去!顺便说一句,我是个菜鸟,我正在努力学习。 我必须编写一些代码来打开一个 csv 文件并格式化列表,以便它可以与 Libsvm 一起使用,但无论如何 这是我到目前为止写的代码:

import csv
with open ('testingSeta.csv')as csvfile:
reader = csv.reader(csvfile, delimiter = ',')
for i in reader:
    i.insert (0, i.pop(13))
    print (" ".join(i))

这给了我一个这样的列表:

-1 0 1 1 0 1 1 1 4 5 6 5 5 8
-1 0 1 0 0 1 1 1 4 3 7 1 3 6
 1 3 7 2 0 4 4 1 41 46 86 20 18 48
 1 10 11 0 0 6 6 3 26 65 102 25 16 38

testingSeta.csv 原始格式:

0,1,1,0,1,1,1,4,5,6,5,5,8,-1
0,1,0,0,1,1,1,4,3,7,1,3,6,-1
3,7,2,0,4,4,1,41,46,86,20,18,48,1
10,11,0,0,6,6,3,26,65,102,25,16,38,1

我希望列表按如下顺序排列:

-1 1:0 2:1 3:1 4:0 5:1 6:1 7:1 8:4 9:5 10:6 11:5 12:5 13:8
-1 1:0 2:1 3:0 4:0 5:1 6:1 7:1 8:4 9:3 10:7 11:1 12:3 13:6
1 1:3 2:7 3:2 4:0 5:4 6:4 7:1 8:41 9:46 10:86 11:20 12:18 13:48
1 1:10 2:11 3:0 4:0 5:6 6:6 7:3 8:26 9:65 10:102 11:25 12:16 13:38

编号“1:”应始终从第二个数字/值开始。 任何身体都可以帮忙吗? 感谢您的宝贵时间

【问题讨论】:

  • testingSeta.csv 的示例内容将是有用的。
  • 完成。添加到帖子中
  • 不要简单地使用插入切片,你应该使用枚举来索引

标签: python list csv printing indexing


【解决方案1】:
with open('testingSeta.csv') as f:
   for line in csv.reader(f):
      print(' '.join(
                [line[-1]] + 
                ['{0}:{1}'.format(*x) for x in enumerate(line[:-1], start=1)]))


-1 1:0 2:1 3:1 4:0 5:1 6:1 7:1 8:4 9:5 10:6 11:5 12:5 13:8
-1 1:0 2:1 3:0 4:0 5:1 6:1 7:1 8:4 9:3 10:7 11:1 12:3 13:6
1 1:3 2:7 3:2 4:0 5:4 6:4 7:1 8:41 9:46 10:86 11:20 12:18 13:48
1 1:10 2:11 3:0 4:0 5:6 6:6 7:3 8:26 9:65 10:102 11:25 12:16 13:38

【讨论】:

    【解决方案2】:

    试试这样:

    >>> with open('your_file') as f:
    ...     for x in f:
    ...         line = x.strip().split(',')
    ...         print "{} ".format(line[-1]) + " ".join("{}:{}".format(i,y) for i,y in enumerate(line[:-1],start=1))
    ... 
    -1 1:0 2:1 3:1 4:0 5:1 6:1 7:1 8:4 9:5 10:6 11:5 12:5 13:8
    -1 1:0 2:1 3:0 4:0 5:1 6:1 7:1 8:4 9:3 10:7 11:1 12:3 13:6
    1 1:3 2:7 3:2 4:0 5:4 6:4 7:1 8:41 9:46 10:86 11:20 12:18 13:48
    1 1:10 2:11 3:0 4:0 5:6 6:6 7:3 8:26 9:65 10:102 11:25 12:16 13:38
    

    【讨论】:

      【解决方案3】:
      >>> with open ('testingSeta.csv') as csvfile:
      ...     reader = csv.reader(csvfile, delimiter = ',')
      ...     for i in reader:
      ...         last = i.pop(13)
      ...         for index,string in enumerate( i ) :
      ...             i[ index ] = str(index+1) + ":" + string
      ...         print last + " " + " ".join(i)
      ... 
      -1 1:0 2:1 3:1 4:0 5:1 6:1 7:1 8:4 9:5 10:6 11:5 12:5 13:8
      -1 1:0 2:1 3:0 4:0 5:1 6:1 7:1 8:4 9:3 10:7 11:1 12:3 13:6
      1 1:3 2:7 3:2 4:0 5:4 6:4 7:1 8:41 9:46 10:86 11:20 12:18 13:48
      1 1:10 2:11 3:0 4:0 5:6 6:6 7:3 8:26 9:65 10:102 11:25 12:16 13:38
      

      【讨论】:

      • 天啊天哪!你是天使!兰卡人加油!非常感谢。非常爱。
      • @Ash 你不应该使用 insert 一个简单的 end, rest = row[-1:], row[:-1] 将提取最后一个元素,直到最后一个元素,并且 enumerate 非常适合获取索引
      • @PadraicCunningham 所以我应该使用 end, rest = row[-1:], row[:-1] 而不是 i.insert (0, i.pop(13))??跨度>
      • @Ash,抱歉应该是 row[-1],row[:-1] row[-1] 是代码中的最后一行元素或 13,然后 row[:-1] 最多不包括最后一行。
      猜你喜欢
      • 1970-01-01
      • 2016-07-17
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多