在没有切片或 reverse() 的情况下仅反转列表中的整数
Reversing ONLY integers in list without slice or reverse()
我正在尝试创建一个程序来仅反转给定列表中的整数,忽略浮点数和字符串。此外,它不能使用任何内置函数来执行此操作(reverse() 和 [::-1])。到目前为止,我有
def intvert(lst):
finallst = []
for i in range(len(lst)-1,-1,-1):
if i == type(int):
finallst.append(i)
elif i != type(int):
continue
return finallst
但是,这只会产生 [] 作为输出
示例:(1,g,2.6,2,3,4,h,dfgs,dsgfgdsg,5) 变为 (5,4,3,2,1)
没有任何内容附加到您的列表的原因是您的 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,该值将附加到您的列表中。
仅供参考:在这种情况下,您也不需要 elif 或 else 块。
生成器可用于此类任务。请注意,最好使用 isinstance
而不是 type
。此外,如果您不打算对它们做任何事情,则不必显式检查 non-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))
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.'''
要过滤您的列表,您可以使用列表理解:
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)
我正在尝试创建一个程序来仅反转给定列表中的整数,忽略浮点数和字符串。此外,它不能使用任何内置函数来执行此操作(reverse() 和 [::-1])。到目前为止,我有
def intvert(lst):
finallst = []
for i in range(len(lst)-1,-1,-1):
if i == type(int):
finallst.append(i)
elif i != type(int):
continue
return finallst
但是,这只会产生 [] 作为输出
示例:(1,g,2.6,2,3,4,h,dfgs,dsgfgdsg,5) 变为 (5,4,3,2,1)
没有任何内容附加到您的列表的原因是您的 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,该值将附加到您的列表中。
仅供参考:在这种情况下,您也不需要 elif 或 else 块。
生成器可用于此类任务。请注意,最好使用 isinstance
而不是 type
。此外,如果您不打算对它们做任何事情,则不必显式检查 non-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))
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.'''
要过滤您的列表,您可以使用列表理解:
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)