【问题标题】:Read file as a list of tuples of tuples将文件作为元组的元组列表读取
【发布时间】:2020-11-08 20:27:11
【问题描述】:

我想使用 Python 读取文本文件。我的清单一定是这样的:

    mylist = [((5., 10.), (6.4, 13)),
              ((7., 11.), (5.6, 5.)),
              ((4., 5.67), (3.1, 2.)),
              ((13., 99.), (3.2, 1.1))]

我的文本文件是:

    text file: 5., 10., 6.4, 13.
               7., 11., 5.6, 5.
               4., 5.67, 3.1, 2.
               13., 99., 3.2, 1.1

python代码是:

    with open('test.txt') as f:
      mylist = [tuple((tuple(map(float, i.split(','))))) for i in f]
    print(mylist)

我的结果:

    [(5.0, 10.0, 6.4, 13.0), (7.0, 11.0, 5.6, 5.0), (4.0, 5.67, 3.1, 2.0), (13.0, 99.0, 3.2, 1.1)]

非常感谢

【问题讨论】:

    标签: python list tuples readfile


    【解决方案1】:

    你可以更进一步:

    lst = [(5.0, 10.0, 6.4, 13.0), (7.0, 11.0, 5.6, 5.0), (4.0, 5.67, 3.1, 2.0), (13.0, 99.0, 3.2, 1.1)]
    lst2 = [(tt[:2],tt[2:]) for tt in lst]
    
    print(lst2)
    

    输出

    [((5.0, 10.0), (6.4, 13.0)), ((7.0, 11.0), (5.6, 5.0)), ((4.0, 5.67), (3.1, 2.0)), ((13.0, 99.0), (3.2, 1.1))]
    

    【讨论】:

      【解决方案2】:

      您需要将这些行拆分为两个单独的元组。将mylist 更改为此将起作用:

      mylist = [tuple([tuple(s[:2]), tuple(s[2:])]) 
          for s in [list(map(float, i.split(",")))
          for i in f]]
      

      【讨论】:

      • 我试了一下,但我的输出有问题:[(('5.', '10.'), ('6.4', '13.\n')), (( '7.', '11.'), ('5.6', '5.\n')), (('4.', '5.67'), ('3.1', '2.\n')) , (('13.', '99.'), ('3.2', '1.1'))]
      • 这与您之前发布的输出不兼容。请解决差异。
      • 哎呀错过了浮点转换 - 现在补充说
      • 感谢您的帮助,但我不知道为什么会出现这个错误:for s in [map(float, i.split(",")) TypeError: 'map' object is not subscriptable
      • 啊,在 python3 中,您需要用 list 调用包装 map,因为它返回一个迭代器 - 再次更新
      猜你喜欢
      • 1970-01-01
      • 2011-06-17
      • 1970-01-01
      • 1970-01-01
      • 2019-08-21
      • 1970-01-01
      • 2023-03-25
      • 2011-07-27
      • 1970-01-01
      相关资源
      最近更新 更多