如何在不使用slice和reverse()的情况下仅反转列表中的整数(忽略浮点数与字符串)
嘿,我来帮你搞定这个问题!看起来你当前的程序没正确提取出列表里的整数,才会输出空列表对吧?我们一步步来解决它:
第一步:先准确筛选出所有整数
首先得从输入里把整数挑出来,这里要注意严格区分int和float——比如2.0是浮点数,不能算整数。所以我们遍历输入的每个元素,用type(item) is int来判断,这样能精准筛选出纯整数:
# 先收集所有整数 input_data = (1, 'g', 2.6, 2, 3, 4, 'h', 'dfgs', 'dsgfgdsg', 5) integers = [] for item in input_data: if type(item) is int: integers.append(item) # 此时 integers 是 [1,2,3,4,5]
第二步:手动实现反转(不用内置函数)
接下来要反转这个整数列表,不能用reverse()或者[::-1],我们可以用最简单的“从后往前遍历”的方式,把元素逐个添加到新列表里:
reversed_result = [] # 从最后一个元素的索引开始(len(integers)-1),一直到第一个元素(索引0) index = len(integers) - 1 while index >= 0: reversed_result.append(integers[index]) index -= 1 # 此时 reversed_result 是 [5,4,3,2,1]
如果喜欢原地反转的方式,也可以用双指针交换首尾元素:
left = 0 right = len(integers) - 1 while left < right: # 交换左右指针指向的元素 integers[left], integers[right] = integers[right], integers[left] left += 1 right -= 1 # 此时 integers 会变成 [5,4,3,2,1]
完整代码整合
把上面的步骤整合成一个函数,适配你的输入输出(元组类型):
def reverse_only_integers(input_tuple): # 筛选整数 integers = [] for item in input_tuple: if type(item) is int: integers.append(item) # 手动反转 reversed_integers = [] index = len(integers) - 1 while index >= 0: reversed_integers.append(integers[index]) index -= 1 # 转成元组返回 return tuple(reversed_integers) # 测试你的示例输入 test_input = (1, 'g', 2.6, 2, 3, 4, 'h', 'dfgs', 'dsgfgdsg', 5) print(reverse_only_integers(test_input)) # 输出:(5, 4, 3, 2, 1)
为什么你之前输出[]?
大概率是筛选整数的条件写错了——比如用了isinstance(item, int)(虽然这个在多数情况下也能用,但如果遇到bool类型会有问题,因为isinstance(True, int)是True),或者根本没正确执行收集整数的逻辑,导致后续反转的是空列表。用type(item) is int能更精准地匹配纯整数类型。
内容的提问来源于stack exchange,提问作者Alden
相关产品推荐
相关产品推荐

