Python 语言中的骚操作
1.python中for _ in range(10) 与 for i in range(10):for _ in range(n) 一般仅仅用于循环n次,不用设置变量,用 _ 指代临时变量,只在这个语句中使用一次。在循环中两者的作用相似。
·
1.python中for _ in range(10) 与 for i in range(10):
for _ in range(n) 一般仅仅用于循环n次,不用设置变量,用 _ 指代临时变量,只在这个语句中使用一次。
在循环中两者的作用相似。
2.Python 三元表达式写法 A if x else B ,代表当 x = Truex=True 时执行 A ,否则执行 B。
# 如下代码:表示l1为真,执行cur.next = l1,否则执行cur.next = l2
cur.next = l1 if l1 else l2
3.return not的妙用:
在剑指offer31题中:最后返回语法为:
return not stack # 这里stack为空, not stack意思是返回一个bool类型true
4.python中的pop()函数和popleft()函数
首先对于pop而言,它是用于stack中的,可以带参数:
而对于pooleft是用于collections中,不可以带参数
5.from functools import partial
简单而言,partial 函数的功能就是:把一个函数的某些参数给固定住,返回一个新的函数。需要注意的是,我们上面是固定了 multiply 的关键字参数 y=2,如果直接使用:
downsample = partial(downsample_basic_block,
planes=planes * block.expansion,
stride=stride)
6.剑指offer50题
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。
代码如下:
# 1.哈希表
class Solution:
def firstUniqChar(self, s: str) -> str:
dic = {}
for c in s:
dic[c] = not c in dic
for c in s:
if dic[c]: return c
return ' '
# 2.有序哈希表
class Solution:
def firstUniqChar(self, s: str) -> str:
dic = collections.OrderedDict()
for c in s:
dic[c] = not c in dic
for k, v in dic.items():
if v: return k
return ' '
在上述代码中,dic[c] = not c in dic中的 not c in dic整体为一个布尔值
7.leetcode27题
用python 方法返回改变后的数组,只需返回数组长度就能显示数组
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
for _ in range(nums.count(val)):
nums.remove(val)
return len(nums)
作者:silence_yu
链接:https://leetcode-cn.com/problems/remove-element/solution/3xing-gao-ding-zui-jian-pythonjie-fa-yon-im9k/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
同样leetcode26题最后也是返回数组长度,最后显示结果是整个新的数组???
代码如下:
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
if not nums:
return 0
n = len(nums)
fast = slow = 1
while fast < n:
if nums[fast] != nums[fast - 1]:
nums[slow] = nums[fast]
slow += 1
fast += 1
return slow
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/solution/shan-chu-pai-xu-shu-zu-zhong-de-zhong-fu-tudo/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
8.leetcode28题-字符串匹配问题
KMP算法
9.实现没有除号的除法
leetcode29题
换成距离更好理解,大佬代码地址
C++代码:
class Solution {
public:
int divide(int dividend, int divisor) {
if (dividend == INT_MIN && divisor == -1) return INT_MAX; // 特殊情况,单独处理
long terminus = labs(dividend), stride = labs(divisor), res = 0; // 屏蔽符号带来的干扰
while (stride <= terminus) {
long span = stride, sub = 1; // 计算要走的步数
while (terminus >= span << 1) // 步数按 *2 增长
span <<= 1, sub <<= 1; // 记录步数增长的倍数
terminus -= span, res += sub; // 砍掉一半的距离,并记录步数的增长
}
return (dividend < 0) ^ (divisor < 0) ? -res : res; // 返回带符号的值
}
};
作者:fengziluo
链接:https://leetcode-cn.com/problems/divide-two-integers/solution/huan-cheng-ju-chi-ke-neng-geng-hao-li-ji-olb9/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
感觉python代码更好理解
# 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。
#
# 返回被除数 dividend 除以除数 divisor 得到的商。
#
# 整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2
#
#
#
# 示例 1:
#
# 输入: dividend = 10, divisor = 3
# 输出: 3
# 解释: 10/3 = truncate(3.33333..) = truncate(3) = 3
#
# 示例 2:
#
# 输入: dividend = 7, divisor = -3
# 输出: -2
# 解释: 7/-3 = truncate(-2.33333..) = -2
#
#
#
# 提示:
#
#
# 被除数和除数均为 32 位有符号整数。
# 除数不为 0。
# 假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。本题中,如果除法结果溢出,则返回 231 − 1。
#
# Related Topics 位运算 数学
# 👍 629 👎 0
# leetcode submit region begin(Prohibit modification and deletion)
class Solution(object):
def divide(self, dividend, divisor):
"""
:type dividend: int
:type divisor: int
:rtype: int
"""
# 将被除数和除数转化为整数
sign = 1
if divisor * dividend < 0:
sign = -1
divisor = abs(divisor)
dividend = abs(dividend)
elif divisor < 0 and dividend < 0: # 如果被除数和除数都是负值,结果不修改符号
divisor = abs(divisor)
dividend = abs(dividend)
remain = dividend # 余数
result = 0 # 商
while remain >= divisor:
cur = 1 # 倍增商
div = divisor # 倍增值
while div + div < remain:
cur += cur
div += div
remain -= div # 余数递减
result += cur # 商值累计
if sign == -1:
result = -result
if result >= 2**31: # 按照题目要求,溢出处理
result = 2**31 -1
return result
10.一定要掌握的位操作运算
更多推荐
已为社区贡献1条内容
所有评论(0)