TypeError: not all arguments converted during string formatting (Python 3) (Strings)

TypeError: not all arguments converted during string formatting (Python 3) (Strings)

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

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:

由于输入是 STRING,我面临着类似的问题

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' 是一个字符串,问题是按浮点元素对元组进行排序

  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.
    

您将参数作为字符串传递:

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]

您没有将列表传递给函数,而是 字符串。因此,循环中的枚举将枚举列表中的字符,即 '[' 然后 '1',然后 ','

这可能不是您想要的。

改为使用该调用:

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

删除[]并拆分字符串:

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']

同样对于你问题的第二部分,如前所述,只需使用 ast:

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]

您不能对字符串使用“%”运算符。从字符串中删除那些不能转换为 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]'))

这将 return 一个偶数列表。