python 列表解析总是返回空列表

fcg9iug3  于 2022-11-21  发布在  Python
关注(0)|答案(3)|浏览(210)

如果第一个元素是一个数字,则输出应该是一个数字列表。我试图删除列表b中所有的非数字元素。
示例-输入:1 2 3 4输出:[3、4、5](2+1、3+1、4+1)
输入:1 2 B 4输出:[3,5](2+1,B被吹扫,4+1)
输入:1 × 2 × 3输出:继承人无效

linha = input()
a = linha.split()
b = [x for x in (a[1:]) if type(x)==int] 
b = [eval(x) for x in b]
c = eval(a[0])
d = []
d.append(c)
f = d*len(b)
def soma(): 
  if type(c)!= int: return print("Sucessor invalido")
  else: return list(map(lambda x, y: x + y, b, f))
g = soma()
g

〉此条件始终返回空列表

if type(x)==int

对不起,如果我不清楚,我最近开始学习

snz8szmq

snz8szmq1#

两件事:

  1. input的结果总是字符串,当你拆分字符串时,你得到的是更多的字符串,所以即使那个字符串是'7',它也是字符串7,而不是整数7。
    1.如果您要检查对象是否属于型别,请使用isinstance(x,int),而不要使用type(x)==int
    为了完成看起来像你正在做的事情,我不知道你是否可以用列表理解来得到它,因为你可能需要一个try:...except:...块,就像这样。
linha = input()
a = linha.split()
b = [] #empty list
for x in a[1:]: # confusing thing you are doing here, also... you want to skip the first element?
    try:
        x_int = int(x)
        b.append(x_int)
    except ValueError:
        pass
...
brvekthn

brvekthn2#

在检查它们是否是有效的数字值之后,需要将由行分隔的数字转换为整数,如下所示:

b = [int(x) for x in (a[1:]) if x.isnumeric()]

这是因为默认情况下,您的输入是字符串,而split()只是字符串列表

lb3vh1jj

lb3vh1jj3#

您的输入是string,您需要将其转换为int,然后进行计算以将其追加到新列表中。
函数应该首先使用str.islpha()方法检查索引0。如果它是一个字母表,则返回无效输入。
除了在迭代输入列表时使用try。如果某个元素不能被转换为int,它将继续到下一个索引。

def soma(linha):
    if linha[0].isalpha():
        return f"Sucessor invalido"
    result = []
    for i in range(len(linha) - 1):
        try:
            result.append(int(linha[0]) + int(linha[i+1]))
        except ValueError:
            continue
    return result

linha = input().split()

print(soma(linha))

输出量:

相关问题