在列表中仅反转整数而不切片或反向()

时间:2018-02-18 20:55:16

标签: python list int slice reverse

我正在尝试创建一个程序来仅反转给定列表中的整数,忽略浮点数和字符串。另外,它不能使用任何内置函数(reverse()和[:: - 1])。到目前为止,我有

xd1

但是,这只会产生[]作为输出

示例:(1,g,2.6,2,3,4,h,dfgs,dsgfgdsg,5)变为(5,4,3,2,1)

4 个答案:

答案 0 :(得分:3)

生成器对这些类型的任务很有用。请注意,最好使用isinstancetype。如果你不打算对它们做任何事情,你也不必显式检查非int类型。

def intvert(lst):
    for i in range(len(lst)-1, -1, -1):
        if isinstance(lst[i], int):
            yield lst[i]

list(intvert([1, 2, 3, 4]))

# [4, 3, 2, 1]

list(intvert([1, 'test', 2, ['another test'], 3, 4]))

# [4, 3, 2, 1]

请注意,通过将生成器函数转换为生成器表达式,可以进一步优化生成器函数:

def intvert(lst):
    return (lst[i] for i in range(len(lst)-1, -1, -1) if isinstance(lst[i], int))

答案 1 :(得分:2)

没有任何内容附加到您的列表的原因是因为您的 if 条件是错误的。通过键入if i == type(int),您试图验证您的计数器变量“i”(总是一个整数)是否等于Python的保留关键字“int”的类型......这实际上没有意义。

这是一个if条件,应该让这个工作:

    
if isinstance(lst[i],int):
    finallst.append(lst[i])    

您需要索引列表中的值(some indexing exercises here)。 “isinstance()”方法检查“lst”中第i个位置的值的类型,以键入 int 。如果为True,则该值将附加到列表中。

Fyi:在这种情况下,您也不需要 elif else 块。

答案 2 :(得分:0)

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



lis=[1,"aa",2,"b",3,"c"]
lim=[]
for x in lis:
    if is_int(x)==True:
        lim.append(x)

k=len(lim)

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

print(lim)


'''this code does so same logic as yours tell me if you didnt understand.i used 
type operater you can use something else.'''

答案 3 :(得分:0)

要过滤您的列表,您可以使用列表推导:

input_list = [1,2.6,'hi',3,'blah',{},99]

filtered_list = [x for x in input_list if type(x) is int]

>>> [1,3,99]

然后,您可以根据您的作业限制以任何方式反转该列表。通常你会在filtered_list上调用.reverse(),但由你决定。如果list.reverse()没有了,我不知道是否允许list.instert(),但如果是,那么你可以这样做:

reversed_filtered_list = []
for i in filtered_list:
    reversed_filtered_list.insert(0, i)