检查列表是否仅包含整数

时间:2018-08-23 12:01:16

标签: python

我有一个程序

  • 如果列表仅由整数组成,则颠倒列表的顺序
  • 如果列表仅包含单词,则将列表项转换为大写
  • 如果列表成员不满足这两个条件之一,则返回同一列表

我已经写了它,但是我希望程序在列表中循环,如果类型int的值是-append,并且当字符串类型的下一个值显示原始列表并结束循环时

我认为我的代码执行得不好:

def is_int(val):
    if type(val) == int:
        return True
    else:
        return False

def is_string(val):
      if type(val) == str:
         return True
      else:
         return False

def is_float(val):
    if type(val) == float:
        return True
    else:
        return False

def invert(val):
    k = len(val)

    for i in range(k//2):
        a = val[i]
        val[i] = val[k-1]
        val[k-1] = a

    print(val)


lis = ["a","c",2,7]
lim = []
tart = 1
for x in lis:
    if is_int(x) == True and is_int(lis[tart:]) == True:
        lim.append(x)
        tart += 1
    elif is_string(x) == True and is_string(lis[tart:]) == True :
        x = x.upper()
        lim.append(x)
        tart += 1
    else:
        print(lis)
        break


invert(lim)

2 个答案:

答案 0 :(得分:5)

您可以使用此-

all(isinstance(i, int) for i in lis)

如果list的所有元素都是整数,这将为您提供True,然后您可以修改代码以针对字符串和整数进行测试

if all(isinstance(i, int) for i in lis):
    return list(reversed(lis)) # return reversed list
elif all(isinstance(i, str) for i in lis):
    return [i.upper() for i in lis] # change to uppercase and return the list
return lis # return list as is

答案 1 :(得分:0)

您可以改为执行以下操作:

if all(isinstance(i, int) for i in lis):
    lim = lis[::-1]
elif all(isinstance(i, str) for i in lis):
    lim = [i.upper() for i in lis]