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

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交换变量内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

Python实现在一行中交换两个变量的更多相关文章

  1. ios – 如何从变量访问属性或方法?

    是否可以使用变量作为Swift中方法或属性的名称来访问方法或属性?在PHP中,您可以使用$object->{$variable}.例如编辑:这是我正在使用的实际代码:解决方法你可以做到,但不能使用“纯粹的”Swift.Swift的重点是防止这种危险的动态属性访问.你必须使用Cocoa的Key-ValueCoding功能:非常方便,它完全穿过你要穿过的字符串到属性名称的桥,但要注意:这里是龙.

  2. iOS &gt;&gt;块&gt;&gt;更改块外部的变量值

    我不是在处理一个Object并改变它,就像我的mString一样.我希望’center’属性的行为类似于myInt,因为它是直接访问的C结构,而不是指向对象的指针.我希望’backgroundColor’的行为类似于我的imstring,因为它是一个指向一个新对象的对象的指针,不是吗?

  3. ios – Xcode Bot:如何在post触发器脚本上获得.ipa路径?

    我正在使用机器人来存档iOS应用程序,我需要获取.ipa产品路径才能将其发布到我们的分发系统中.机器人设置:并使用脚本打印所有env变量,其中不包含ipa文件的路径.此外,一些变量指向不存在的目录,即:XCS_OUTPUT_DIR这里的env变量输出:除此之外,我还能够确认.ipa文件是在另一个文件夹中创建的(/IntegrationAssets//

  4. ios – 使用附加字符串本地化Info.plist变量

    我正在尝试本地化应用程序的名称,同时仍然能够根据构建配置追加字符串.所以目前它被设置为:该设置定义为:通过这种方式,我们可以为应用程序添加后缀以用于不同的beta版本.问题是,当我们尝试本地化本地化的InfoPlist.strings中的应用程序显示名称时,就像这样我们覆盖存储在Info.plist中的值,并丢失后缀字符.这有什么好办法吗?

  5. iOS – 开始iOS教程 – 变量之前的下划线?

    这是正确的还是我做错了什么?

  6. ios – 静态计算变量被多次实例化

    我有一个日期格式化程序,我试图在UITableViewCell子类中创建一个单例,所以我创建了一个这样的计算属性:问题是我不止一次看到print语句,这意味着它不止一次被创建.我已经找到了其他方法,但我很想知道这里发生了什么.有任何想法吗?解决方法您的代码段相当于只获取属性,基本上它与以下内容相同:如果你只想运行一次,你应该像定义一个惰性属性一样定义它:

  7. ios – UIApplication.delegate必须仅在主线程中使用[复制]

    我应该在主调度中的viewControllers中声明这些)变量位置声明定义了它的范围.您需要确定这些变量的范围.您可以将它们声明为项目或应用程序级别(全局),类级别或特定此功能级别.如果要在其他ViewControllers中使用这些变量,则使用公共/开放/内部访问控制将其声明为全局或类级别.

  8. ios – 无法理解Objective-C块文档

    为什么localVariable“按价值使用?”>如果我在第二个例子中将__block存储类型添加到localVariable,我错误地假设该块关闭了变量,所以它将它保留在堆中直到块被释放?解决方法Howexactlyisoneexample“accessedbyreference”whiletheotheroneisaccessedbyvariable?self是当前正在执行找到块的方法的对象.强引用只是意味着对象的保留计数增加.IfIaddthe__blockstoragetypetolocalVar

  9. ios – 为BOOL变量编写getter和setter

    显然,使用obj-c,通常没有理由编写getter和setter(感谢有用的mr@synthesize).所以现在,需要做到这一点,我遇到了一个我不知道如何编写它们的问题.:p我敢肯定我可能不会以正确的方式解决我的问题–只是将我的对象子类化得更容易–但我正在尝试编写类别代码以添加属性,因为(在开头)它更快,因为我想学习如何在我的应用程序中使用类别代码.我有这个:我在setter中没有if查询就试过

  10. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部