【问题标题】:Converting a list of strings of numbers to tuples with integers Python3将数字字符串列表转换为具有整数的元组 Python3
【发布时间】:2018-10-19 02:17:18
【问题描述】:

例子:

我的系统上保存了一个名为data.txt 的文件。该文件包含如下信息:

'Noah,14,233,66,21,88,42'
'Robert,34,11,667,2,785,23'
'Jackson,85,22,73,12,662,5'

等等,

我的问题是我怎样才能使它成为一个带有整数的元组?,所以这是需要的:

('Noah', [14,233,66,21,88,42] ),
('Robert', [34,11,667,2,785,23] )

我假设您必须为每一行使用一个 for 循环,但我无法弄清楚任何事情。 任何帮助将不胜感激!

【问题讨论】:

  • 你确定要一个元组吗?您的数据格式似乎与键/值对集合的想法相匹配,这就是 python 中的 dict 所做的。其中名称可以是键,数字列表是字典中每个键的值。
  • 您目前是否有任何代码可以加载data.txt 文件并读取这些行?如果是这样,将其包含在您的帖子中可能会有所帮助,这样我们就可以看到您是如何做到的,以防万一出现问题。

标签: python string list tuples


【解决方案1】:

你可以试试这个:

   with open(data.txt, 'r') as f:
        lines = [(line.strip().split(',')[0], line.strip().split(',')[1:])for line in f]
   print(lines)

它将以您描述的格式返回一个元组列表。

【讨论】:

  • 感谢您的评论,这正是我想要的方式!太棒了,非常感谢!
  • 您可以点赞我的回答并点击旁边的复选标记将您的问题标记为已回答。
  • 这个答案在同一个字符串上使用了两次split() 函数,这是不必要的,请检查我的答案。
【解决方案2】:

同意其他人的观点,字典可能最适合这种情况,但这应该可以实现您的目标:

data= """Noah,14,233,66,21,88,42
Robert,34,11,667,2,785,23
Jackson,85,22,73,12,662,5"""

[(row.split(',')[0], row.split(',')[1:]) for row in data.split('\n')]

输出:

[('Noah', ['14', '233', '66', '21', '88', '42']),
('Robert', ['34', '11', '667', '2', '785', '23']),
('Jackson', ['85', '22', '73', '12', '662', '5'])]

【讨论】:

    【解决方案3】:

    假设文本与问题中的文本完全相同:

    import re
    
    input = """
    'Noah,14,233,66,21,88,42'
    
    'Robert,34,11,667,2,785,23'
    
    'Jackson,85,22,73,12,662,5'
    """
    
    lines = re.findall("'.*'", input) # Find lines which contain text between single quotes
    
    tuples = []
    
    for line in lines:
      line = line.replace("'", "").split(",") # Remove single quotes, split by comma
      tuples.append((line[0], line[1:])) # Add to tuple
    
    print(tuples)
    

    哪个会打印:

    [
      ('Noah', ['14', '233', '66', '21', '88', '42']), 
      ('Robert', ['34', '11', '667', '2', '785', '23']), 
      ('Jackson', ['85', '22', '73', '12', '662', '5'])
    ]
    

    首先我们抓取所有在两个单引号之间的行。然后取出单引号并通过用逗号分隔它来创建一个数组。最后用第一个元素和第二个到最后一个元素的子数组创建一个元组。

    【讨论】:

      【解决方案4】:

      如果您想要与您提到的完全相同的输出,您可以将, 上的每一行拆分并存储在一个元组中,

      x = 'Noah,14,233,66,21,88,42'
      # split string on , 
      x = x.strip().split(',')
      # x[0] is name, while x[1]....x[n] are numbers
      y = (x[0], x[1:])
      print(y)
      

      输出,

      ('Noah', ['14', '233', '66', '21', '88', '42'])
      

      显然你需要先从文件中分别读取每一行,所以,

      with open("file_name", "r") as file:
          for line in file:
            line = line.strip().split(',')
            output = (line[0], line[1:])
      

      将输出,

      ('Noah', ['14', '233', '66', '21', '88', '42'])
      ('Robert', ['34', '11', '667', '2', '785', '23'])
      ('Jackson', ['85', '22', '73', '12', '662', '5'])
      

      【讨论】:

        猜你喜欢
        • 2021-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-14
        相关资源
        最近更新 更多