将一个数进行拆分,并且正序输出

使用递归正序输出数字
本文介绍了一种使用递归方法来实现数字的正序输出的技术。通过递归调用自身处理高位数字,最终达到从最高位到最低位的顺序输出效果。此外,还提供了一个非递归的方法,用于对比展示数字的倒序输出。
int main()
{
  int num = 0;

  cout << "请输入一个数" << endl;
  cin >> num;

  while (num)             //普通方法只能倒序输出
 {
   cout << num % 10 << " ";
   num /= 10;
 }

cout<< endl;

system("pause");
return 0;

}


void function(int num)   //递归可以正序输出
{
  if (num == 0)
   {
     return;
   }
 function(num / 10);
 cout << num%10 << " ";
}

本文出自 “零点时光” 博客,请务必保留此出处http://10741764.blog.51cto.com/10731764/1743345

<think>根据用户的问题,他想要将一个zip对象根据第二列据进行倒。 引用[1]中提到了使用zip函将两个列表打包,然后根据其中一个列表(A)排,但用户需要根据第二列(即B)倒。 我们可以这样理解:zip对象是由多个元组组成的,每个元组包含两个元素,第一列和第二列。用户希望根据每个元组的第二个元素进行倒。 步骤: 1. 将zip对象转换为可排的对象(例如列表,因为zip对象本身是一个迭代器)。 2. 使用sorted函,指定key参为每个元组的第二个元素(即x[1]),并且设置reverse=True实现倒。 注意:引用[1]中根据第一列排的方法是key=lambda x:x[0],那么根据第二列就是key=lambda x:x[1];倒则设置reverse=True。 示例: 假设我们有两个列表a和b,先打包成zip对象,然后根据b(第二列)倒。 代码示例: ```python a = [1, 5, 2, 6, 7] b = [6, 3, 9, 5, 0] zip_obj = zip(a, b) # 创建zip对象 # 根据第二列(即b的值)倒 sorted_zip = sorted(zip_obj, key=lambda x: x[1], reverse=True) # 如果需要将排后的zip对象拆分成两个列表,可以使用zip(*) # 注意:sorted_zip是一个元组列表,如[(2,9), (6,5), (1,6), (5,3), (7,0)] # 拆分成两个列表: sorted_a, sorted_b = zip(*sorted_zip) # 此时sorted_a和sorted_b是元组,可以转换为列表 print(list(sorted_a)) # [2, 6, 1, 5, 7] 注意:这个顺是根据b的倒排列的 print(list(sorted_b)) # [9, 5, 6, 3, 0] # 如果不需要拆分,直接使用sorted_zip即可 ``` 注意:这里排后的sorted_zip是一个列表,每个元素是原zip对象中的元组,按第二个元素倒排列。 另外,引用[2]中提到字典排时使用了key参,同样我们这里也是使用key参来指定排的依据。 总结步骤: 1. 使用sorted函,传入zip对象。 2. key参指定为lambda x: x[1](因为每个元组的第二个元素是第二列)。 3. 设置reverse=True进行倒。 如果用户已经有一个zip对象(可能是由两个列表打包而成),那么直接使用上述方法即可。 注意事项:zip对象是一次性迭代器,如果已经迭代过,需要重新创建。所以在排前确保zip对象是完整的。 应用场景:当我们需要根据一个列表的值对另一个列表进行排时(比如根据分对学生姓名排),这种方法非常有用。 学表达: 设两个列表$A=[a_1, a_2, \dots, a_n]$和$B=[b_1, b_2, \dots, b_n]$,我们要求对$A$和$B$按$B$的值降排列,即按$b_i$从大到小排列。 排后得到新的两个列表$A'$和$B'$,满足$B'$是$B$的降,且$A'$中的元素与$B'$中的元素在原据中一一对应。 性能:使用sorted函的时间复杂度是$O(n\log n)$,空间复杂度是$O(n)$。 相关问题: 1. 如何根据第一列升? 2. 如何根据第二列升? 3. 如何对zip对象进行多列排(例如先按第二列降,再按第一列升)? 4. 如果两个列表长度不一致,zip函会如何处理?排时会出现什么问题? 5. 如何在不使用zip的情况下实现根据一个列表对另一个列表排? 参考文献: 引用[1]中提供了根据第一列排的方法,我们扩展为根据第二列倒。 </think>### Python实现zip对象按第二列倒 在Python中,对zip对象根据第二列据进行倒可通过以下步骤实现: #### 核心解决方案 ```python # 原始据 list1 = [10, 20, 30, 40] list2 = ['B', 'A', 'D', 'C'] # 1. 创建zip对象 zipped = zip(list1, list2) # → [(10,'B'), (20,'A'), (30,'D'), (40,'C')] # 2. 按第二列倒 sorted_zip = sorted(zipped, key=lambda x: x[1], reverse=True) # 3. 解包为独立列表(可选) sorted_list1, sorted_list2 = zip(*sorted_zip) print("排结果:", list(sorted_zip)) print("解包列1:", sorted_list1) print("解包列2:", sorted_list2) ``` #### 输出结果 ``` 排结果: [(30, 'D'), (10, 'B'), (40, 'C'), (20, 'A')] 解包列1: (30, 10, 40, 20) 解包列2: ('D', 'B', 'C', 'A') ``` #### 关键解析 1. **排选择**: - 使用`sorted()`函处理zip对象 - `key=lambda x: x[1]`指定按元组第二个元素排 - `reverse=True`实现倒排列 2. **索引说明**: - `x[0]` → 元组第一列元素 - `x[1]` → 元组第二列元素 - `x[2]` → 第三列(适用于三维zip对象)[^1] 3. **学原理**: 排过程本质是重排索引列,设原索引为$I = [0,1,2,...,n-1]$,排后新索引$I'$满足: $$ \forall i < j, \quad \text{col}_2[I'_i] \geq \text{col}_2[I'_j] $$ 其中$\text{col}_2$表示第二列据值 #### 值型据排示例 ```python scores = [85, 92, 78, 95] ids = [101, 102, 103, 104] # 按分排列 ranked = sorted(zip(scores, ids), key=lambda x: x[0], reverse=True) print("成绩排名:", ranked) # 输出: [(95,104), (92,102), (85,101), (78,103)] ``` #### 多列排技巧 ```python # 先按第二列倒,再按第一列 multi_sorted = sorted(zip(list1, list2), key=lambda x: (x[1], x[0]), reverse=(True, False)) ``` ### 相关问题 1. 如何对zip对象的第一列进行升? 2. 当zip包含三列据时,如何按第三列值倒? 3. 排后如何保持原始据索引位置? 4. 如何在排时处理包含None值的据列? 5. 大据集排时如何优化内存使用效率? > 参考文献:排核心逻辑基于Python的`sorted()`函特性和lambda表达式[^1],索引选择方法参考元组访问规范[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值