技术图文:集合技术在求解算法题中的应用
背景
前段时间,在知识星球立了一个Flag,这是总结Leetcode刷题的第四篇图文。
理论部分
HashSet
C# 语言中 HashSet<T>
是包含不重复项的无序列表,称为“集合(set
)”。由于set
是一个保留字,所以用HashSet
来表示。
public HashSet();
- -> 构造函数
public HashSet(IEnumerable<T> collection);
- -> 构造函数
public int Count { get; }
- -> 获取集合中包含的元素数。
public bool Add(T item);
- -> 将指定的元素添加到集合中。
public bool Remove(T item);
- -> 从集合中移除指定元素。
public void Clear();
- -> 从集合中移除所有元素。
public bool Contains(T item);
- -> 确定集合中是否包含指定的元素。
public void UnionWith(IEnumerable<T> other);
- -> 并集
public void IntersectWith(IEnumerable<T> other);
- -> 交集
public void ExceptWith(IEnumerable<T> other);
- -> 差集
public bool IsSubsetOf(IEnumerable<T> other);
- -> 确定当前集合是否为指定集合的子集。
public bool IsProperSubsetOf(IEnumerable<T> other);
- -> 确定当前集合是否为指定集合的真子集。
public bool IsSupersetOf(IEnumerable<T> other);
- -> 确定当前集合是否为指定集合的超集。
public bool IsProperSupersetOf(IEnumerable<T> other);
- -> 确定当前集合是否为指定集合的真超集。
public bool Overlaps(IEnumerable<T> other);
- -> 确定是否当前集合和指定的集合共享通用元素。
public bool SetEquals(IEnumerable<T> other);
- -> 确定是否当前集合和指定集合包含相同的元素。
set
Python 中set
与dict
类似,也是一组key
的集合,但不存储value
。由于key
不能重复,所以,在set
中,没有重复的key
。
num = {}
print(type(num)) # <class 'dict'>
num = {1, 2, 3, 4}
print(type(num)) # <class 'set'>
集合的创建
- 先创建对象再加入元素(不可变类型,即可哈希的值)。
- 在创建空集合的时候只能使用
s = set()
,因为s = {}
创建的是空字典。
basket = set()
basket.add('apple')
basket.add('banana')
print(basket) # {'banana', 'apple'}
- 直接把一堆元素用花括号括起来
{元素1, 元素2, ..., 元素n}
。 - 重复元素在
set
中会被自动被过滤。
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket) # {'banana', 'apple', 'pear', 'orange'}
- 使用
set(value)
工厂函数,把列表或元组转换成集合。
a = set('abracadabra')
print(a)
# {'r', 'b', 'd', 'c', 'a'}b = set(("Google", "Lsgogroup", "Taobao", "Taobao"))
print(b)
# {'Taobao', 'Lsgogroup', 'Google'}c = set(["Google", "Lsgogroup", "Taobao", "Google"])
print(c)
# {'Taobao', 'Lsgogroup', 'Google'}
- 去掉列表中重复的元素
lst = [0, 1, 2, 3, 4, 5, 5, 3, 1]temp = []
for item in lst:if item not in temp:temp.append(item)print(temp) # [0, 1, 2, 3, 4, 5]a = set(lst)
print(list(a)) # [0, 1, 2, 3, 4, 5]
从结果发现集合的两个特点:无序 (unordered) 和唯一 (unique)。
由于 set
存储的是无序集合,所以我们不可以为集合创建索引或执行切片(slice)操作,也没有键(keys)可用来获取集合中元素的值,但是可以判断一个元素是否在集合中。
访问集合中的值
- 可以使用
len()
內建函数得到集合的大小。
thisset = set(['Google', 'Baidu', 'Taobao'])
print(len(thisset)) # 3
- 可以使用
for
把集合中的数据一个个读取出来。
thisset = set(['Google', 'Baidu', 'Taobao'])
for item in thisset:print(item)# Baidu
# Google
# Taobao
- 可以通过
in
或not in
判断一个元素是否在集合中已经存在
thisset = set(['Google', 'Baidu', 'Taobao'])
print('Taobao' in thisset) # True
print('Facebook' not in thisset) # True
集合的内置方法
set.add(elmnt)
- -> 用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作。
set.update(set)
- -> 用于修改当前集合,可以添加新的元素或集合到当前集合中,如果添加的元素在集合中已存在,则该元素只会出现一次,重复的会忽略。
set.remove(item)
- -> 用于移除集合中的指定元素。如果元素不存在,则会发生错误。
set.discard(value)
- -> 用于移除指定的集合元素。
remove()
方法在移除一个不存在的元素时会发生错误,而discard()
方法不会。 set.pop()
- -> 用于随机移除一个元素。
set.intersection(set1, set2 ...)
- -> 返回两个集合的交集。
set1 & set2
返回两个集合的交集。set.intersection_update(set1, set2 ...)
- -> 交集,在原始的集合上移除不重叠的元素。
set.union(set1, set2...)
- -> 返回两个集合的并集。
set1 | set2
- -> 返回两个集合的并集。
set.difference(set)
- -> 返回集合的差集。
set1 - set2
- -> 返回集合的差集。
set.difference_update(set)
- -> 集合的差集,直接在原来的集合中移除元素,没有返回值。
set.symmetric_difference(set)
- -> 返回集合的异或。
set1 ^ set2
- -> 返回集合的异或。
set.symmetric_difference_update(set)
- -> 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
set.issubset(set)
- -> 判断集合是不是被其他集合包含,如果是则返回 True,否则返回 False。
set1 <= set2
- -> 判断集合是不是被其他集合包含,如果是则返回 True,否则返回 False。
set.issuperset(set)
- -> 用于判断集合是不是包含其他集合,如果是则返回 True,否则返回 False。
set1 >= set2
- -> 判断集合是不是包含其他集合,如果是则返回 True,否则返回 False。
set.isdisjoint(set)
- -> 用于判断两个集合是不是不相交,如果是返回 True,否则返回 False。
frozenset
Python 提供了不能改变元素的集合的实现版本,即不能增加或删除元素,类型名叫frozenset
。需要注意的是frozenset
仍然可以进行集合操作,只是不能用带有update
的方法。
frozenset([iterable])
- -> 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。
应用部分
题目1:存在重复元素
- 题号:217
- 难度:简单
- https://leetcode-cn.com/problems/contains-duplicate/
给定一个整数数组,判断是否存在重复元素。
如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。
示例 1:
输入: [1,2,3,1]
输出: true
示例 2:
输入: [1,2,3,4]
输出: false
示例 3:
输入: [1,1,1,3,3,4,3,2,4,2]
输出: true
思路:通过集合的方法
C# 语言
- 状态:通过
- 18 / 18 个通过测试用例
- 执行用时: 156 ms, 在所有 C# 提交中击败了 93.33% 的用户
- 内存消耗: 30.3 MB, 在所有 C# 提交中击败了 5.31% 的用户
public class Solution
{public bool ContainsDuplicate(int[] nums){if (nums.Length < 2)return false;HashSet<int> h = new HashSet<int>();foreach (int num in nums){if (h.Contains(num))return true;h.Add(num);}return false;}
}
Python 语言
- 执行结果:通过
- 执行用时:48 ms, 在所有 Python3 提交中击败了 78.11% 的用户
- 内存消耗:18.9 MB, 在所有 Python3 提交中击败了 24.00% 的用户
class Solution:def containsDuplicate(self, nums: List[int]) -> bool:if len(nums) < 2:return Falseh = set()for num in nums:if num in h:return Trueh.add(num)return False
题目2:相交链表
- 题号:160
- 难度:简单
- https://leetcode-cn.com/problems/intersection-of-two-linked-lists/
编写一个程序,找到两个单链表相交的起始节点。
如下面的两个链表:
在节点 c1 开始相交。
示例 1:
输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
输出:Reference of the node with value = 8
输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。
从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。
在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。
示例 2:
输入:intersectVal = 2, listA = [0,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1
输出:Reference of the node with value = 2
输入解释:相交节点的值为 2 (注意,如果两个列表相交则不能为 0)。
从各自的表头开始算起,链表 A 为 [0,9,1,2,4],链表 B 为 [3,2,4]。
在 A 中,相交节点前有 3 个节点;在 B 中,相交节点前有 1 个节点。
示例 3:
输入:intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
输出:null
输入解释:从各自的表头开始算起,链表 A 为 [2,6,4],链表 B 为 [1,5]。
由于这两个链表不相交,所以 intersectVal 必须为 0,而 skipA 和 skipB 可以是任意值。
解释:这两个链表不相交,因此返回 null。
注意:
- 如果两个链表没有交点,返回 null.
- 在返回结果后,两个链表仍须保持原有的结构。
- 可假定整个链表结构中没有循环。
- 程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。
思路:通过集合的方法
C# 语言
- 状态:通过
- 45 / 45 个通过测试用例
- 执行用时: 172 ms, 在所有 C# 提交中击败了 100.00% 的用户
- 内存消耗: 37.6 MB, 在所有 C# 提交中击败了 5.88% 的用户
/*** Definition for singly-linked list.* public class ListNode {* public int val;* public ListNode next;* public ListNode(int x) { val = x; }* }*/public class Solution
{public ListNode GetIntersectionNode(ListNode headA, ListNode headB){HashSet<ListNode> hash = new HashSet<ListNode>();ListNode temp = headA;while (temp != null){hash.Add(temp);temp = temp.next;}temp = headB;while (temp != null){if (hash.Contains(temp))return temp;temp = temp.next;}return null;}
}
Python 语言
- 执行结果:通过
- 执行用时:200 ms, 在所有 Python3 提交中击败了 40.19% 的用户
- 内存消耗:29.4 MB, 在所有 Python3 提交中击败了 5.00% 的用户
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = Noneclass Solution:def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> None:h = set()temp = headAwhile temp is not None:h.add(temp)temp = temp.nexttemp = headBwhile temp is not None:if temp in h:return temptemp = temp.nextreturn None
题目3:环形链表
- 题号:141
- 难度:简单
- https://leetcode-cn.com/problems/linked-list-cycle/
给定一个链表,判断链表中是否有环。
为了表示给定链表中的环,我们使用整数pos
来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果pos
是 -1,则在该链表中没有环。
示例 1:
输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。
示例 2:
输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。
示例 3:
输入:head = [1], pos = -1
输出:false
解释:链表中没有环。
进阶:
你能用 O(1)(即,常量)内存解决此问题吗?
思路:通过集合的方法
通过检查一个结点此前是否被访问过来判断链表是否为环形链表。
C# 语言
- 状态:通过
- 执行用时:112 ms, 在所有 C# 提交中击败了 84.04% 的用户
- 内存消耗:26.5 MB, 在所有 C# 提交中击败了 100.00% 的用户
/*** Definition for singly-linked list.* public class ListNode {* public int val;* public ListNode next;* public ListNode(int x) {* val = x;* next = null;* }* }*/
public class Solution {public bool HasCycle(ListNode head) {HashSet<ListNode> h = new HashSet<ListNode>();ListNode temp = head;while (temp != null){ if (h.Contains(temp))return true;h.Add(temp);temp = temp.next;}return false; }
}
Python 语言
- 执行结果:通过
- 执行用时:60 ms, 在所有 Python3 提交中击败了 64.49% 的用户
- 内存消耗:17.3 MB, 在所有 Python3 提交中击败了 9.52% 的用户
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = Noneclass Solution:def hasCycle(self, head: ListNode) -> bool:h = set()temp = headwhile temp is not None:if temp in h:return Trueh.add(temp)temp = temp.nextreturn False
题目4:环形链表 II
- 题号:142
- 难度:中等
- https://leetcode-cn.com/problems/linked-list-cycle-ii/
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
说明:不允许修改给定的链表。
示例 1:
输入:head = [3,2,0,-4], pos = 1
输出:tail connects to node index 1
解释:链表中有一个环,其尾部连接到第二个节点。
示例 2:
输入:head = [1,2], pos = 0
输出:tail connects to node index 0
解释:链表中有一个环,其尾部连接到第一个节点。
示例 3:
输入:head = [1], pos = -1
输出:no cycle
解释:链表中没有环。
进阶:
你是否可以不用额外空间解决此题?
思路:通过集合的方法
C# 语言
- 状态:通过
- 16 / 16 个通过测试用例
- 执行用时: 140 ms, 在所有 C# 提交中击败了 82.93% 的用户
- 内存消耗: 26 MB, 在所有 C# 提交中击败了 5.00% 的用户
/*** Definition for singly-linked list.* public class ListNode {* public int val;* public ListNode next;* public ListNode(int x) {* val = x;* next = null;* }* }*/
public class Solution
{public ListNode DetectCycle(ListNode head) {HashSet<ListNode> h = new HashSet<ListNode>();ListNode temp = head;while (temp != null){ if (h.Contains(temp))return temp;h.Add(temp);temp = temp.next;}return null; }
}
Python 语言
- 执行结果:通过
- 执行用时:72 ms, 在所有 Python3 提交中击败了 36.52% 的用户
- 内存消耗:17.2 MB, 在所有 Python3 提交中击败了 7.69% 的用户
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = Noneclass Solution:def detectCycle(self, head: ListNode) -> ListNode:h = set()temp = headwhile temp is not None:if temp in h:return temph.add(temp)temp = temp.nextreturn None
题目5:快乐数
- 题号:202
- 难度:简单
- https://leetcode-cn.com/problems/happy-number/
编写一个算法来判断一个数是不是“快乐数”。
一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。
示例:
输入: 19
输出: true
解释:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1输入:7
输出:true输入: 20
输出: false
解释:
20 => 4 + 0
4 => 16
16 => 1 + 36
37 => 9 + 49
58 => 25 + 64
89 => 64 + 81
145 => 1 + 16 + 25
42 => 16 + 4
20 可以看到, 20再次重复出现了, 所以永远不可能等于1
思路:通过集合的方法
C# 语言
- 执行结果:通过
- 执行用时:48 ms, 在所有 C# 提交中击败了 80.74% 的用户
- 内存消耗:17 MB, 在所有 C# 提交中击败了 100.00% 的用户
public class Solution
{public bool IsHappy(int n) {HashSet<int> h = new HashSet<int>();int m = 0;while (true){while (n != 0){m += (int)Math.Pow(n % 10,2);n /= 10;}if (m == 1){return true;}if (h.Contains(m)){return false;} h.Add(m);n = m;m = 0;} }
}
Python 语言
- 执行结果:通过
- 执行用时:40 ms, 在所有 Python3 提交中击败了 79.79% 的用户
- 内存消耗:13.8 MB, 在所有 Python3 提交中击败了 9.09% 的用户
class Solution:def isHappy(self, n: int) -> bool:h = set()m = 0while True:while n != 0:m += (n % 10) ** 2n //= 10if m == 1:return Trueif m in h:return Falseh.add(m)n = mm = 0
题目6:只出现一次的数字
- 题号:136
- 难度:简单
- https://leetcode-cn.com/problems/single-number/
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
思路:通过集合的方法
C# 语言
- 状态:通过
- 16 / 16 个通过测试用例
- 执行用时: 136 ms, 在所有 C# 提交中击败了 98.86% 的用户
- 内存消耗: 26.4 MB, 在所有 C# 提交中击败了 5.34% 的用户
public class Solution
{public int SingleNumber(int[] nums){HashSet<int> h = new HashSet<int>();for (int i = 0; i < nums.Length; i++){if (h.Contains(nums[i])){h.Remove(nums[i]);}else{h.Add(nums[i]);}}return h.ElementAt(0);}
}
Python 语言
- 执行结果:通过
- 执行用时:60 ms, 在所有 Python3 提交中击败了 55.88% 的用户
- 内存消耗:15.6 MB, 在所有 Python3 提交中击败了 5.26% 的用户
class Solution:def singleNumber(self, nums: List[int]) -> int:h = set()for num in nums:if num in h:h.remove(num)else:h.add(num)return list(h)[0]
总结
本篇图文首先介绍了 C# 与 Python 中的集合。C# 的集合类型是 HashSet
,Python 的集合类型是 set
,另外还提供不可变集合frozenset
。其次通过六道Leetcode题目介绍了集合这种类型的应用。
通过对这块知识的总结,不得不说 Python 提供了丰富的操作来简化开发人员的工作,怪不得大家都说“人生苦短,我用Python!”今天就到这里吧。Flag完成率80%,See You!
当前活动
我是 终身学习者“老马”,一个长期践行“结伴式学习”理念的 中年大叔。
我崇尚分享,渴望成长,于2010年创立了“LSGO软件技术团队”,并加入了国内著名的开源组织“Datawhale”,也是“Dre@mtech”、“智能机器人研究中心”和“大数据与哲学社会科学实验室”的一员。
愿我们一起学习,一起进步,相互陪伴,共同成长。
后台回复「搜搜搜」,随机获取电子资源!
欢迎关注,请扫描二维码:
相关文章:

sql server 2008数据导入Oracle方法
试了几种sql server数据导入Oracle的方法,发现还是sql server 的导入导出工具最好使。使用方法很简单,照着向导做就可以。不过使用中需要注意以下几点: 系统盘需要足够大。因为SSIS的临时文件都是生成在系统盘的,系统盘太小&#…

nginx+tomcat配置负载均衡集群
一、Hello world 1、前期环境准备 准备两个解压版tomcat,如何同时启动两个tomcat,方法如下: 首先去apache tomcat官网下载一个tomcat解压版。 解压该压缩包,生成n份tomcat 分别命名为 tomcat1,tomcat2, 然后…

参加UI设计培训要学多久
UI设计要学习的内容有很多,至于参加UI设计培训要学多久这个问题,要看你的学习能力和所在的UI设计培训机构都教些什么,我们来看看下面的详细介绍。 参加UI设计培训要学多久?千锋教育的课程大纲分享给大家参考学习一下: 阶段一&…

技术图文:C# 语言中的扩展方法
背景 前段时间,在知识星球立了一个Flag,在总结 Leetcode 刷题的第五篇图文时遇到了扩展方法 这个知识点,于是先总结一下。 1.扩展方法概述 扩展方法能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以…

如何在ToolBar中显示文字和图标,自定义图标大小,并和MenuItem关联
要注意以下几个方面,先后顺序未必正确,有可能多设几次 1.设置ToolBar可以显示文字ToolBar.ShowCaption : True;2.设置ToolButton大小ImageList.WidthImageList.Height3.设置菜单关联4.设置运行时显示图标(这个是关键)ToolButton.Menuitum.ImageIndex要保证MenuItem所在的MainMe…

C#程序调用cmd执行命令
酷小孩 原文 C#程序调用cmd执行命令 对于C#通过程序来调用cmd命令的操作,网上有很多类似的文章,但很多都不行,竟是漫天的拷贝。我自己测试整理了一下。 代码: string str Console.ReadLine();System.Diagnostics.Process p new …

Java虚拟机的内存空间有几种
Java虚拟机的内存空间有几种?(1)问题分析: JVM(虚拟机)的内存划分 不同的数据使用的是哪一块内存空间 (2)核心答案讲解: Java虚拟机有那几块内存空间: 1)栈内存:方法运行时所进入的内存,里面还会存储程序的…

技术图文:排序技术在求解算法题中的应用
背景 前段时间,在知识星球立了一个Flag,这是总结Leetcode刷题的第五篇图文。 理论部分 C# 中的排序 对集合类的排序,我们通常使用位于 System.Core 程序集,System.Linq命名空间下,Enumerable静态类中的扩展方法。 …

如果有电脑——计算机达人成长之路(36)
5、电脑情缘(一)王新华的电脑 现在的大学生一般都有一个工具,就是计算机,尤其是计算机科学系的学生,几乎人手一台。对此,木鸿飞只能深深的说上一句:“幸福啊!” 现在人可能不能了解这…

Javascript中二进制数据处理方法
Javascript中二进制数据处理方法 转载于:https://www.cnblogs.com/motadou/archive/2012/02/19/2358514.html

正规Java培训机构是什么样的
正规Java培训机构是什么样的?这对于很多想真正学习到java技术的人来说是非常重要的,选择一个适合自己的靠谱的Java培训机构,学有所成工作也是比较稳定的,下面我们来看看详细的介绍。 正规Java培训机构是什么样的?其实对于这个问题…

《40期》 我们要把世纪末日变成重生日
2012年.传说中一个会是世纪末日的一年。(ps:电影看多了……- _-!!!),但是寒假过后的北京。天气却是十分的晴朗、出奇的好。而就在今天也就是2012年2月9日40期的开班典礼就选了这一天。地点就是在育荣教学园区2栋教学楼…

LeetCode刷题宝典 V1.0 PDF下载
前段时间,在知识星球立了一个Flag,现在 Flag 的进度为 100%,很是开心。 为了大家学习的方便,所以整理了这份150多页的小册子。可以作为学习数据结构与算法或备考计算机类研究生的参考资料,希望对大家有所帮助。 小册子…

机器学习:信用风险评估评分卡建模方法及原理
#课程介绍 信用风险评分卡为信用风险管理提供了一种有效的、经验性的解决方法,是消费信贷管理中广泛应用的技术手段。 评分卡是信用风险评估领域常见的建模方法。评分卡并不加单对应于某一种机器学习算法,而是一种通用的建模框架,讲原始数据通…

0基础学怎么学习python
Python相对于其他编程语言来说是比较简单的,非常适合零基础的小白学习,想要进入到互联网行业,可以优先选择学习Python,那么下面小编就来为大家详细的介绍一下0基础学怎么学习python? 0基础学怎么学习python? 1、要读书…

nginx技术(2)nginx的配置详解
nginx的配置 1,启动nginx 1234567[rootcentos6 nginx-1.2.9]# /usr/sbin/nginx -c /etc/nginx/nginx.conf 启动nginx [rootcentos6 nginx-1.2.9]# ps -ef|grep nginx 查看进程 root 5479 1 0 04:15 ? 00:00:00 nginx: master process /usr/sbin/nginx -…

javascript 基础篇2 数据类型,语句,函数
文章里如果有错误的话,希望能帮忙指正~我也是边看视频边学习中,这个算是个笔记吧~自认为总结出来的东西比看视频要节省点时间~能帮到别人最好了~帮不到也起码恩能帮到我自己 嘿~ 写内容之前废话一句:因为旧版有些浏览器不支持javascript脚本&…

技术图文:如何在Python中定义二维数组?
背景 前几天,有位同学问我如下的问题: “temp[0][0]修改后,为什么temp[1][0]、temp[2][0]也发生了变化?” “在Python中二维数组是怎样定义和使用的?” 今天就来谈谈这个问题。 技术分析 在 C# 语言中有直接定义二…

javascript的垃圾回收机制指的是什么
定义:指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束。 像 C 这样的编程语言,具有低级内存管理原语,如 malloc()和 free()。开发人员使用这些原语显式地对操作系统的内存进行分配和释放。 而 JavaScript…

技术图文:Matlab向量 VS. Python列表
背景 前段时间在知识星球上立了一个Flag,至少写10篇关于 Python,Matlab 和 C# 对比的总结。这是第 1 篇,从创建结构、添加元素、删除元素、获取元素四个角度来对比 Matlab 的向量与 Python 的列表。 1. 向量/列表 的创建 1.1 直接法 Matla…

我的ExtJS学习之路 ——4
项目基本架子出来,然后就该考虑将封装好的gridpanel 和 tabpanel关联起来 既 点击树的叶子节点,将 gridpanel 展现在 tabpanel中 怎么关联呢? 【在之前的基础上的,重复的代码就不贴出来了】 我改变了 模拟数据的形式,注…

php CI框架输出空行问题排查
今天在使用 curl 命令行工具调试一个功能时,发现输出的内容总是会在最开始莫名其妙的多一行空行: 项目框架是 php 的 CodeIgniter,感觉这种问题在网上不好查找,因为可以确定这个是业务出现的问题,然后只能自己去定位查…

哪些人适合学习软件测试
软件测试相对于其他编程语言来说,它的入门门槛是相对比较低的,想要从事IT互联网行业可以选择学习软件测试,那么都有哪些人适合学习软件测试呢?来看看下面的详细介绍吧。 哪些人适合学习软件测试?就在软件测试培训行业观察来看,小…

c语言基本函数
一.内存操作函数: (1) 头文件:#include <string.h>memset() 函数用来将指定内存的前n个字节设置为特定的值,其原型为: void * memset( void * ptr, int value, size_t num );参数说明:…

技术图文:Python 匿名函数 VS. C# Lambda表达式
背景 前段时间在知识星球上立了一个Flag,至少写10篇关于 Python,Matlab 和 C# 对比的总结。 这是第 2 篇,从定义和应用两个角度来对比 Python 的匿名函数 与 C# 的Lambda表达式。 匿名函数/Lambda表达式的定义 Python 匿名函数 在 Python…

php是否区分大小写
按常理来说,大多数语言都是区分大小写的,比如变量 ab 和 AB 是不同的,函数cd 和 CD 也是不同的,但是php有点特别。 首先,php中的变量和常量是区分大小写的。 <?php$a a; $A A; echo $a; echo $A;?>这里打印了…

如何创建和获取正则对象?
在JavaSript应用中,使用正则表达式之前,需要创建正则对象。创建正则表达式的方式有两种,一种是用字面量方式创建,另种是通过RegExp0构造函数的方式创建。这两种方式的语法格式如下。 //字面量方式 var变量名/表达式/; // RegExp构…

Numpy入门教程:01. 数组的创建与属性
背景 什么是 NumPy 呢? NumPy 这个词来源于两个单词 – Numerical和Python。其是一个功能强大的 Python 库,可以帮助程序员轻松地进行数值计算,通常应用于以下场景: 执行各种数学任务,如:数值积分、微分、…

深入浅出WPF——x:Class详解
小序:按照惯例,我会在年末的最后一篇文章里感谢所有帮助过我的人们。今年也不例外,只是形式简单一些。祝所有帮助过我的朋友、同事、学生和兄弟姐妹们——2009年身体健康、平安快乐、财源滚滚。愿2009年的中国,平安祥和、远离各种…

SQL Date 函数
MySQL Date 函数 函数描述NOW()返回当前的日期和时间CURDATE()返回当前的日期CURTIME()返回当前的时间DATE()提取日期或日期/时间表达式的日期部分EXTRACT()返回日期/时间按的单独部分DATE_ADD()给日期添加指定的时间间隔DATE_SUB()从日期减去指定的时间间隔DATEDIFF()返回两个…