Python实现在一行中交换两个变量

我们已经讨论了在没有临时变量的情况下交换两个整数的不同方法。如何在不使用库函数的情况下换成一行?

1) Python: 在Python中,有一个简单且语法简洁的结构来交换变量,我们只需要写“x, y = y, x”。

2)C/C++: 下面是一个普遍提供的经典解决方案:

// 使用按位异或交换(C/C++ 中的错误解决方案)
x ^= y ^= x ^= y;

上述解决方案在 C/C++ 中是错误的,因为它会导致未定义的行为(编译器可以自由地以任何方式运行)。原因是,如果修改之间没有序列点,则在表达式中多次修改变量会导致未定义的行为。 但是,我们可以使用逗号来引入序列点。所以修改后的解决方案是

// 使用按位异或交换(C/C++ 中的正确解决方案)
// 使用逗号引入的序列点。
(x ^= y), (y ^= x), (x ^= y);

3)Java: 在Java中,子表达式求值的规则是明确定义的。左侧操作数总是在右侧操作数之前计算。在 Java 中,表达式“x ^= y ^= x ^= y;” 不会根据 Java 规则产生正确的结果。它使 x = 0。但是,我们可以使用“x = x ^ y ^ (y = x);” 请注意,表达式是从左到右计算的。如果最初 x = 5 和 y = 10,则表达式等价于“x = 5 ^ 10 ^ (y = 5);”。请注意,我们不能像在 C/C++ 中那样在 C/C++ 中使用 this,它没有定义左操作数或右操作数是否由任何运算符执行

4)JavaScript: 使用析构赋值,我们可以简单地使用这一行来实现交换。

[x,y]=[y,x]

C 程序实现在单行中交换两个变量

// C 程序在单行中交换两个变量
#include <stdio.h>
int main()
{
	int x = 5, y = 10;
	(x ^= y), (y ^= x), (x ^= y);
	printf("After Swapping values of x and y are %d %d", x,
		y);
	return 0;
}

使用 XOR 交换的 C++ 代码

// 使用 XOR 交换的 C++ 代码
#include <bits/stdc++.h>

using namespace std;

int main()
{
	int x = 5, y = 10;
	// 交换'x'和'y'以在一行中交换两个数字的代码
	x = x ^ y, y = x ^ y, x = x ^ y;
	// 打印交换的变量
	cout << "After Swapping: x = "
		<< x << ", y= " << y;
	return 0;
}

Java程序在一行中交换两个变量

// Java程序在一行中交换两个变量
class GFG {
	public static void main(String[] args)
	{
		int x = 5, y = 10;
		x = x ^ y ^ (y = x);
		System.out.println(
			"After Swapping values"
			+" of x and y are " + x
			+ " " + y);
	}
}

Python 程序在一行中交换两个变量

# Python 程序在一行中交换两个变量
x = 5
y = 10
x, y = y, x
print("After Swapping values of x and y are", x, y)

C# 程序在单行中交换两个变量

// C# 程序在单行中交换两个变量
using System;

class GFG {
	static public void Main()
	{
		int x = 5, y = 10;
		x = x ^ y ^ (y = x);
		Console.WriteLine("After Swapping values "
						+ "of x and y are " + x + " "
						+ y);
	}
}

PHP程序在单行中交换两个变量

<?php
// PHP程序在单行中交换两个变量

	// Driver Code
	$x = 5;
	$y = 10;
	($x ^= $y);
	($y ^= $x);
	($x ^= $y);
	echo "After Swapping values of x and y are "
								,$x," ", $y;

javascript 程序在单行中交换两个变量

<script>
// javascript 程序在单行中交换两个变量

	let x = 5, y = 10;
	(x ^= y), (y ^= x), (x ^= y);
	document.write("After Swapping values of x and y are ", x + " ",
		y);
</script>

输出

After Swapping values of x and y are 10 5

替代解决方案:

  • 使用 swap():C++ 库函数
  • b = (a + b) – (a = b);
  • a += b – (b = a);
  • a = a * b / (b = a)
  • a = a ^ b ^ (b = a)

时间复杂度:O(1)

辅助空间:O(1)

到此这篇关于Python实现在一行中交换两个变量的文章就介绍到这了,更多相关Python交换变量内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python 如何实现变量交换

    简洁优雅的 C 写法: int a = 1;  int b = 2;  int temp;  temp = a;  a = b;  b = temp;  简洁优雅的 Python 写法: a,b = 1,2  a,bb = b,a  虽然语法非常方便,但我们始终不曾想过:它是怎么运作的?背后支撑它的机制是什么?下面让我们一步步分析它. 比较通俗的说法 最常见的解释是: a,b = b,a 中右侧是元组表达式,即 b,a 是一个两个元素的tuple(a,b).表达式左侧是两个待分配元素,而 = 相

  • python交换两个变量的值方法

    大部分语言,例如c语言,交换两个变量的值需要使用中间变量. 例如交换a,b 伪代码: tmp = a a = b b = tmp python里面可以实现无临时变量的交换 (a,b) = (b,a) 对于它的交换原理我深感好奇,因为这意味着python解释器很有可能做了件更多的工作. 如果说变量可以直接交换,那么列表的元素呢? lists[i], lists[j] =lists[j], lists[i] 是否可以实现列表i,j元素的互换,如果可以实现,原理是什么? 可以实现交换,至于原理,可以用

  • Python交换变量

    如: 复制代码 代码如下: a, b, c = b, c, a 来个复杂一点的例子,再来一顿家喻户晓的"冒泡排序"吧: 复制代码 代码如下: array = [1, 2, 5, 3, 6, 8, 4] for i in range(len(array) - 1, 1, -1): for j in range(0, i): if array[j] > array[j + 1]: array[j], array[j + 1] = array[j + 1], array[j] prin

  • python 实现两个变量值进行交换的n种操作

    python 两个变量值交换 方法一: c = 0 c= a a= b b= c 方法二: a,b = b,a 这是python的基本方法 方法三:(只用两个变量实现) a = a+b b = a-b a = a-b python两个数值互换(浅析a,b=b,a原理) python交换两个值得方法非常简单,即a,b=b,a,一步操作就交换了两个值,那么这是为什么呢? 真相: Python的变量并不直接存储值,而只是引用一个内存地址,交换变量时,只是交换了引用的地址. 先看下面这段程序: impo

  • Python中变量交换的例子

    Python追求简洁,诞生不少运算赋值规则,力求从简,其中就包括两个或者多个变量交换值. 普通语言中 复制代码 代码如下: # 声明变量 a=50 b=10 # 开始交换,先把其中一个值赋给临时变量,然后才能实现交换变量. tmp = a a = b b = tmp 在Python中,实现两个变量值交换非常方便 复制代码 代码如下: # 声明变量 a=50 b=10 # 开始交换变量 a,b = b,a 甚至可以多个变量同时交换 复制代码 代码如下: a=50 b=10 c=20 c,b,a =

  • Python实现变量数值交换及判断数组是否含有某个元素的方法

    本文实例讲述了Python实现变量数值交换及判断数组是否含有某个元素的方法.分享给大家供大家参考,具体如下: 本来,这两个问题都属于的编程入门简单得不能再简单的问题,根本就不值得写篇记录来记录的. 一.变量数值交换 先说变量数值交换,从C语言开始,我们就知道要先设置一个临时变量,再把某元素的值覆盖此临时变量,避免临时覆盖等,如果不设置临时变量,还有位运算的交换形式 然而Python中根本就不用这么复杂,如果要交换变量e1,e2彼此的值,就下面一行代码就足矣: e1,e2=e2,e1; 比如,如下

  • Python实现在一行中交换两个变量

    我们已经讨论了在没有临时变量的情况下交换两个整数的不同方法.如何在不使用库函数的情况下换成一行? 1) Python: 在Python中,有一个简单且语法简洁的结构来交换变量,我们只需要写“x, y = y, x”. 2)C/C++: 下面是一个普遍提供的经典解决方案: // 使用按位异或交换(C/C++ 中的错误解决方案) x ^= y ^= x ^= y; 上述解决方案在 C/C++ 中是错误的,因为它会导致未定义的行为(编译器可以自由地以任何方式运行).原因是,如果修改之间没有序列点,则在

  • Python中交换两个元素的实现方法

    Python既具有普通程序开发语言的特点,也具有Matlab语言用于数值计算的特点,,当然了数值计算是由其其强大的第三方库numpy实现的,矩阵在python中数据类型是ndarray,python中交换两个数值的代码和交换同一矩阵(ndarray)中不同向量的写法是不一样的. 以下是用Python原生的数据结构list实现的交换 >> a = [1,2,3] >> b = [4,5,6] >> a [1,2,3] >> b [4,5,6] >>

  • JavaScript交换两个变量方法实例

    这篇文章主要介绍了JavaScript交换两个变量方法实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在平时的业务开发或者面试过程中,经常会遇到交换两个变量这种问题,于是,个人总结以下几种交换变量的方法: 1.方案一 使用一个临时变量来交换 2.方案二 使用ES6解构赋值语法来交换 3.方案三 利用数组 根据运算符的优先级,首先执行b=a,将a的值赋值给b,然后通过数组索引将b赋值给a,一行代码解决两值的交换. 4.方案四 先让a变成a与b

  • Java 交换两个变量的数值实现方法

    一.参数传递方法 为解决标题问题,首先介绍参数传递方法.目前各类程序设计语言的参数传递方法主要有三种: 1.按值传递 2.按引用传递 3.按指针传递 其中按值传递表示方法(函数)接收的是调用者提供的变量的拷贝,不改变参数的值:按引用传递表示方法(函数)接收的调用者提供的变量地址:按指针传递表示方法(函数)接收的是调用者提供的指针的拷贝,不改变指针的值和地址,但可以改变指针所指向的地址. 二.Java参数传递方法 Java提供的参数传递方法,很遗憾只有一种,按值传递.也就是说,方法得到的是所有参数

  • Python3之不使用第三方变量,实现交换两个变量的值

    method 1: a,b = b,a method 2: a = a+b b = a-b a = a-b 以上这篇Python3之不使用第三方变量,实现交换两个变量的值就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 判断JavaScript中的两个变量是否相等的操作符

    1.为什么要判断? 可能有些同学看到这个标题就会产生疑惑,为什么我们要判断JavaScript中的两个变量是否相等,JavaScript不是已经提供了双等号"=="以及三等号"==="给我们使用了吗? 其实,JavaScript虽然给我们提供了相等运算符,但是还是存在一些缺陷,这些缺陷不符合我们的思维习惯,有可能在使用的时候得到一些意外的结果.为了避免这种情况的出现,我们需要自己函数来实现JavaScript变量之间的对比. 2.JavaScript等号运算符存在哪

  • 零基础写python爬虫之urllib2中的两个重要概念:Openers和Handlers

    在开始后面的内容之前,先来解释一下urllib2中的两个个方法:info / geturl urlopen返回的应答对象response(或者HTTPError实例)有两个很有用的方法info()和geturl() 1.geturl(): 这个返回获取的真实的URL,这个很有用,因为urlopen(或者opener对象使用的)或许会有重定向.获取的URL或许跟请求URL不同. 以人人中的一个超级链接为例, 我们建一个urllib2_test10.py来比较一下原始URL和重定向的链接: 复制代码

  • C语言中交换int型变量的值及转换为字符数组的方法

    不使用其他变量交换两个整型的值: #include <stdio.h> void main(){ int a = 3; int b = 4; a = a ^ b;//使用异或交换 b = b ^ a; a = a ^ b; printf("%d, %d\n", a, b); a = a - b;//使用加减交换 b = a + b; a = b - a; printf("%d, %d\n", a, b); a ^= b ^= a ^= b; printf

  • python 实现交换两个列表元素的位置示例

    在IDLE 中验证如下: >>> numbers = [5, 6, 7] >>> i = 0 >>> numbers[i], numbers[i+1] = numbers[i+1], numbers[i] >>> numbers [6, 5, 7] python是可以一次赋值两个变量的!谢谢! 以上这篇python 实现交换两个列表元素的位置示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

随机推荐