分享
三行代码  ›  专栏  ›  技术社区  ›  Hari Prasad Rangaraj

TypeError:不是所有在字符串格式化期间转换的参数(Python 3)

  •  -2
  • Hari Prasad Rangaraj  · 技术社区  · 5 天前

    TypeError: not all arguments converted during string formatting ,我知道这是因为以“开头的字符串” [ “但我正在解决的问题是把它作为输入字符串” [1, 2, 3, 4, 5, 6, 7, 8, 9] 任务是在Python3上找到偶数。任何帮助都将不胜感激。

    def is_even_num(l):
      enum = []
      for n in l:
         if n % 2 == 0:
           enum.append(n)
      return enum
    print(is_even_num('[1, 2, 3, 4, 5, 6, 7, 8, 9]'))
    
    **TypeError: not all arguments converted during string formatting**
    If I try int(n), I get this error **ValueError: invalid literal for int() with base 10: '[' ** 
    

    编辑1:

    由于输入是一个字符串,我面临着类似的问题

    Python练习:按浮点数对元组排序

    price = "[('item1', '12.20'), ('item2', '15.10'), ('item3', '24.5')]" 
    print( sorted(price, key=lambda x: float(x[1]), reverse=True)) 
    IndexError: string index out of range 
    

    这里的“Price”是一个字符串,问题是如何根据它的float元素对元组进行排序

    1. 使用嵌套循环转置矩阵的程序

      y = "[[1,2,3,4],[4,5,6,7]]"
      result = [[0,0],
       [0,0],
       [0,0],
       [0,0]]
      
      #iterate through rows
      for i in range(len(X)):
      # iterate through columns
          for j in range(len(X[0])):
              result[j][i] = X[i][j]
      for r in result:
        print(r)
      
       IndexError: list index out of range ` I am getting this same type of problem again, the matrix has been input as a STRING.
      
    3 回复  |  直到 5 天前
        1
  •  0
  •   Code Pope    5 天前

    删除 [ ]

    def is_even_num(l):
      enum = []
      for n in l.replace('[','').replace(']','').split(', '):
        if int(n) % 2 == 0:
           enum.append(n)
      return enum
    print(is_even_num('[1, 2, 3, 4, 5, 6, 7, 8, 9]'))
    

    输出:

    ['2', '4', '6', '8']
    

    另一种方式是使用 ast

    def is_even_num(l):
      enum = []
      for n in ast.literal_eval(l):
        if int(n) % 2 == 0:
           enum.append(n)
      return enum
    print(is_even_num('[1, 2, 3, 4, 5, 6, 7, 8, 9]'))
    

    ['2','4','6','8']
    

    还有你的问题的第二部分,如前所述 阿斯特 :

    price = "[('item1', '12.20'), ('item2', '15.10'), ('item3', '24.5')]"  
    price = ast.literal_eval(price) 
    print( sorted(price, key=lambda x: float(x[1]), reverse=True))
    

    [('item3', '24.5'), ('item2', '15.10'), ('item1', '12.20')]
    

    y = "[[1,2,3,4],[4,5,6,7]]"
    result = [[0,0],
     [0,0],
     [0,0],
     [0,0]]
    X = ast.literal_eval(y)
    #iterate through rows
    for i in range(len(X)):
    # iterate through columns
        for j in range(len(X[0])):
            result[j][i] = X[i][j]
    for r in result:
      print(r)
    

    输出:

    [1, 4]
    [2, 5]
    [3, 6]
    [4, 7]
    
        2
  •  0
  •   Daniil    5 天前

    将参数作为字符串传递:

    print(is_even_num('[1, 2, 3, 4, 5, 6, 7, 8, 9]'))
    

    更改为:

    print(is_even_num([1, 2, 3, 4, 5, 6, 7, 8, 9]))
    

    [2, 4, 6, 8]
    
        3
  •  0
  •   user2116486    5 天前

    您不是在向函数传递列表,而是 . 所以循环中的枚举将枚举列表的字符,即。 '[' '1' ,然后 ','

    那可能不是你想要的。

    改为使用该调用:

    print(is_even_num([1, 2, 3, 4, 5, 6, 7, 8, 9]))
    
        4
  •  0
  •   KUNAL KUMAR    5 天前

    不能对字符串使用“%”运算符。从字符串中删除那些不能转换为int或float的字符。

    def is_even_num(l):
        l = l.replace('[','').replace(']','').split(",")
        return [x for x in l if int(x)%2 ==0]
    print(is_even_num('[1, 2, 3, 4, 5, 6, 7, 8, 9]'))
    

    这将返回偶数列表。