【问题标题】:Split a string which is inside a list of a list in two elements which stay in the same list将位于列表列表中的字符串拆分为位于同一列表中的两个元素
【发布时间】:2018-10-29 20:40:52
【问题描述】:

这是我导入并希望转换为特定列表的文本文件中的数字链。

3 04,24
4 04,75
4 05,11
4 05,47
4 05,78
4 06,80
3 07,25
3 07,92
3 08,23
2 09,76

实际上我的代码达到了这一点:

[['3 04,24'], ['4 04,75'], ['4 05,11'], ['4 05,47'], ['4 05,78'], ['4 06,80'], ['3 07,25'], ['3 07,92'], ['3 08,23'], ['2 09,76']]

但我想将元组中的元素一分为二以获得类似的结果:

[['3','04,24'], ['4','04,75']] etc...

但是经过多次研究我找不到解决方案,如果您能告诉我如何将这些元素从字符串转换为 int,那将非常有帮助!

这是我的代码:

with open("myfile.txt") as f:
    mylist = [line.rstrip('\n') for line in f]
    mylist = [mylist[x:x+1] for x in range(0, len(mylist), 1)]
    print(mylist)

谢谢。

【问题讨论】:

    标签: python python-3.x list int tuples


    【解决方案1】:

    这是使用标准库中的csv 模块的一种解决方案:

    import csv
    
    with open('myfile.txt', 'r') as f:
        reader = csv.reader(f, delimiter=' ')
        res = list(reader)
    

    以您的数据为例:-

    from io import StringIO
    import csv
    
    mystr = StringIO("""3 04,24
    4 04,75
    4 05,11
    4 05,47
    4 05,78
    4 06,80
    3 07,25
    3 07,92
    3 08,23
    2 09,76""")
    
    with mystr as f:
        reader = csv.reader(f, delimiter=' ')
        res = list(reader)
    
    print(res)
    
    # [['3', '04,24'],
    #  ['4', '04,75'],
    #  ['4', '05,11'],
    #  ['4', '05,47'],
    #  ['4', '05,78'],
    #  ['4', '06,80'],
    #  ['3', '07,25'],
    #  ['3', '07,92'],
    #  ['3', '08,23'],
    #  ['2', '09,76']]
    

    或者如果您需要将数据转换为数字:

    with mystr as f:
        reader = csv.reader(f, delimiter=' ')
        res = [[int(i), float(j.replace(',', '.'))] for i, j in reader]
    
    print(res)
    
    [[3, 4.24],
     [4, 4.75],
     [4, 5.11],
     ...
    

    【讨论】:

      【解决方案2】:

      简单的解决方法如下

      with open(file,'r') as f:
          print([each.split() for each in f])
      

      【讨论】:

        【解决方案3】:

        使用str.split() 方法:

        with open("myfile.txt") as f:
            mylist = [line.rstrip('\n') for line in f]
            my_structured_list = [line.split(" ") for line in mylist]
        
            print(my_structured_list)
        

        关于将元素转换为 int 的问题的第二部分,您可以再次使用 str.split() 并将结果元素转换为 int

        with open("myfile.txt") as f:
            mylist = [line.rstrip('\n') for line in f]
            my_structured_list = [line.split(" ") for line in mylist]
        
            my_structured_int_list = []
            for line_tuple in my_structured_list:
                input_first_element = line_tuple[0]
                input_second_element, input_third_element = line_tuple[1].split(",")
        
                output_first_half = int(input_first_element)
                output_second_half = int(input_second_element), int(input_third_element)
        
                my_structured_int_list.append((output_first_half, output_second_half))
        
            print(my_structured_int_list)
        

        【讨论】:

          【解决方案4】:

          使用列表理解:

          >>> lst = [['3 04.24'], ['4 04.75'], ['4 05.11'], ['4 05.47'], ['4 05.78'], ['4 06.80'], ['3 07.25'], ['3 07.92'], ['3 08.23'], ['2 09.76']]
          >>> [x[0].split() for x in lst]
          

          输出:

          [['3', '04.24'], 
           ['4', '04.75'], 
           ['4', '05.11'], 
           ['4', '05.47'], 
           ['4', '05.78'], 
           ['4', '06.80'], 
           ['3', '07.25'], 
           ['3', '07.92'], 
           ['3', '08.23'], 
           ['2', '09.76']]            
          

          将字符串转换为整数:

          [[int(i) if not '.' in i else float(i) for i in x[0].split()] for x in lst]
          

          【讨论】:

          • 它也可以,但是如何将这些字符串链转换为 int ?
          • 我已经用点转换了每隔一个数字,我认为这样会更容易。
          • 谢谢,所以我将使用不同的列表,一个带有第一个数字,另一个带有第二个数字。
          • 我想要的看起来像 jpp 的解决方案,但你也很有帮助,ty!
          • 好的,没关系。只是提醒一下:你没有像你的标题所说的那样在这里有任何元组。这是一个列表列表。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-20
          • 1970-01-01
          相关资源
          最近更新 更多