如何同时打印正负索引及其对应元素?求替代方案
问题与解决方案:同时打印元素的正负索引及对应值
需求说明
需要编写Python代码,同时打印元素的正负索引与其对应元素,期望输出格式如下:
(negative index) (positive index) (element) -1 2 3 -2 1 2 -3 0 1
现有问题代码
当前代码运行未达预期,现有代码如下:
t=[] n=int(input("enter how many elements")) for i in range(0,n): a=int(input("enter element")) t.append(a) t=tuple(t) print(t) a=reversed(t) for i,e in *enumerate(a,-n),*enumerate(t,0): print((i),(e))
正确实现方式
现有代码的问题在于:enumerate(reversed(t), -n)会绑定反转后的元素与负索引,导致索引和原元素错位;同时循环合并的写法错误,无法同时对应正负索引和同一元素。
正确思路是:遍历原元组时,对每个元素计算其负索引(负索引公式:-(n - 正索引),n为元素总数),然后按格式打印:
t = [] n = int(input("enter how many elements")) for i in range(n): a = int(input("enter element")) t.append(a) t = tuple(t) # 打印对齐的表头 print(f"{'(negative index)':<18} {'(positive index)':<18} {'(element)':<10}") # 遍历每个元素,计算并打印正负索引与元素 for pos_idx, elem in enumerate(t): neg_idx = -(n - pos_idx) print(f"{neg_idx:<18} {pos_idx:<18} {elem:<10}")
当输入元素1、2、3时,输出将完全匹配期望格式,表头和内容对齐清晰。
替代解决方案
方案1:用zip关联索引序列与元素
直接生成负索引序列(从-1到-n倒序),再通过zip同时绑定负索引、正索引和元素:
t = [] n = int(input("enter how many elements")) for i in range(n): a = int(input("enter element")) t.append(a) t = tuple(t) # 生成负索引序列:-1, -2, ..., -n neg_indices = range(-1, -n-1, -1) pos_indices = range(n) print(f"{'(negative index)':<18} {'(positive index)':<18} {'(element)':<10}") for neg_idx, pos_idx, elem in zip(neg_indices, pos_indices, t): print(f"{neg_idx:<18} {pos_idx:<18} {elem:<10}")
方案2:预构建索引映射字典(适合需复用索引场景)
先把正负索引和元素存入字典,再遍历打印:
t = [] n = int(input("enter how many elements")) for i in range(n): a = int(input("enter element")) t.append(a) t = tuple(t) # 构建包含所有索引与元素的映射 index_element_map = { "negative_indices": [-(n - i) for i in range(n)], "positive_indices": list(range(n)), "elements": list(t) } print(f"{'(negative index)':<18} {'(positive index)':<18} {'(element)':<10}") for neg, pos, elem in zip( index_element_map["negative_indices"], index_element_map["positive_indices"], index_element_map["elements"] ): print(f"{neg:<18} {pos:<18} {elem:<10}")
内容的提问来源于stack exchange,提问作者Mehul Pant
相关产品推荐
相关产品推荐

