我正在尝试创建一个程序来仅反转给定列表中的整数,忽略浮点数和字符串。另外,它不能使用任何内置函数(reverse()和[:: - 1])。到目前为止,我有
xd1
但是,这只会产生[]作为输出
示例:(1,g,2.6,2,3,4,h,dfgs,dsgfgdsg,5)变为(5,4,3,2,1)
答案 0 :(得分:3)
生成器对这些类型的任务很有用。请注意,最好使用isinstance
与type
。如果你不打算对它们做任何事情,你也不必显式检查非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)