承接上篇:Python学习——Python 与 C 语法对比1(输出、注释、运算符、数字型)-CSDN博客
1,字符串
Python | C | 说明 |
---|---|---|
str1 + str2 | strcat(str1, str2) | Python中可以直接使用加号操作符来连接两个字符串。而在C语言中,需要使用库函数strcat() 来连接字符串。 |
len(str) | strlen(str) | Python中可以使用内置函数len() 来获取字符串的长度。而在C语言中,需要使用库函数strlen() 来获取字符串的长度。 |
str.split('delimiter') | strtok(str, "delimiter") | Python中可以使用split() 方法来根据指定的分隔符将字符串分割成子串列表。而在C语言中,需要使用库函数strtok() 来进行字符串分割。 |
str.replace('old', 'new') | str_replace(str, "old", "new") | Python中可以使用replace() 方法来替换字符串中的某个子串为另一个子串。而在C语言中,没有内置的字符串替换函数,需要自己实现或者使用第三方库。 |
str.upper() | strupr(str) | Python中可以使用upper() 方法将字符串转换为大写形式。而在C语言中,需要使用库函数strupr() 来实现字符串的大写转换。 |
str.lower() | strlwr(str) | Python中可以使用lower() 方法将字符串转换为小写形式。而在C语言中,需要使用库函数strlwr() 来实现字符串的小写转换。 |
需要注意的是,Python中的字符串是不可变的,即一旦创建了字符串对象,就不能修改它的内容。而C语言中的字符串是可变的,可以通过指针直接修改字符串的内容。此外,Python中的字符串支持Unicode字符集,而C语言中的字符串通常只支持ASCII字符集。
Python:
my_string = "Hello, World!"
for char in my_string:
print(char)
C:
#include <stdio.h>
#include <string.h>
int main() {
char my_string[] = "Hello, World!";
int length = strlen(my_string);
for (int i = 0; i < length; i++) {
printf("%c\n", my_string[i]);
}
return 0;
}
2,列表
Python | C | 说明 |
---|---|---|
my_list = [1, 2, 3] | int my_array[] = {1, 2, 3}; | Python使用方括号[] 来创建列表,而C语言使用花括号{} 来定义数组。 |
my_list.append(4) | my_array[3] = 4; | Python使用append() 方法向列表添加元素,而C语言通过指定索引位置来赋值。 |
my_list.remove(2) | // 需要手动实现删除元素的操作 | Python使用remove() 方法从列表中删除元素,而C语言需要手动实现删除元素的操作。 |
my_list.index(3) | // 需要手动实现查找元素的操作 | Python使用index() 方法查找元素的索引位置,而C语言需要手动实现查找元素的操作。 |
len(my_list) | sizeof(my_array) / sizeof(my_array[0]) | Python使用内置函数len() 获取列表的长度,而C语言通过计算数组的总字节数除以单个元素的字节数来得到数组长度。 |
my_list.sort() | qsort(my_array, sizeof(my_array) / sizeof(my_array[0]), sizeof(int), compare); | Python使用sort() 方法对列表进行排序,而C语言需要调用库函数qsort() 并传入比较函数来进行排序。 |
需要注意的是,Python的列表是动态数组,可以自动调整大小,而C语言的数组大小是固定的,需要在声明时确定。此外,Python的列表提供了丰富的内置方法,如extend()
、insert()
等,而C语言需要手动实现这些功能。在实际编程中,可以根据具体需求选择适合的语言特性来进行列表操作。
Python:
my_list = [1, 2, 3]
for item in my_list:
print(item)
C:
#include <stdio.h>
int main() {
int my_list[] = {1, 2, 3};
int length = sizeof(my_list) / sizeof(my_list[0]);
for (int i = 0; i < length; i++) {
printf("%d\n", my_list[i]);
}
return 0;
}
3,元组
Python | C | 说明 |
---|---|---|
my_tuple = (1, 2, 3) | int my_array[] = {1, 2, 3}; | Python使用圆括号() 来创建元组,而C语言使用花括号{} 来定义数组。 |
my_tuple[0] | my_array[0] | Python通过索引访问元组中的元素,而C语言同样通过索引访问数组中的元素。 |
len(my_tuple) | sizeof(my_array) / sizeof(my_array[0]) | Python使用内置函数len() 获取元组的长度,而C语言通过计算数组的总字节数除以单个元素的字节数来得到数组长度。 |
my_tuple = (4, 5, 6) | // 需要重新分配内存并复制元素 | Python可以修改元组的内容,但通常需要重新分配内存并复制元素。C语言的数组大小是固定的,不能直接修改其内容。 |
my_tuple += (7, 8) | // 需要重新分配内存并复制元素 | Python可以使用+= 运算符将两个元组合并成一个新的元组,这同样需要重新分配内存并复制元素。C语言没有类似的操作。 |
my_tuple.count(2) | // 需要手动实现计数功能 | Python使用count() 方法统计元组中某个元素的出现次数,而C语言需要手动实现计数功能。 |
需要注意的是,Python的元组是不可变的,一旦创建就不能修改其内容。
而C语言的数组是可变的,可以通过索引直接修改其内容。
在实际编程中,可以根据具体需求选择适合的语言特性来进行元组操作。
Python:
my_tuple = (1, 2, 3)
for item in my_tuple:
print(item)
C:
#include <stdio.h>
int main() {
int my_tuple[] = {1, 2, 3};
int length = sizeof(my_tuple) / sizeof(my_tuple[0]);
for (int i = 0; i < length; i++) {
printf("%d\n", my_tuple[i]);
}
return 0;
}
4,字典
Python | C | 说明 |
---|---|---|
my_dict = {'a': 1, 'b': 2, 'c': 3} |
| Python使用花括号{} 来创建字典,而C语言使用结构体(struct)来定义类似字典的数据结构。 |
my_dict['a'] | my_map.a | Python通过键访问字典中的元素,而C语言通过结构体的成员变量访问。 |
len(my_dict) | // 需要手动计算元素个数 | Python使用内置函数len() 获取字典的长度,而C语言需要手动计算结构体成员的数量。 |
my_dict.get('d', 0) | // 需要手动实现查找功能 | Python使用get() 方法获取字典中的值,如果键不存在则返回默认值,而C语言需要手动实现查找功能。 |
my_dict.keys() | // 需要手动实现获取所有键的功能 | Python使用keys() 方法获取字典的所有键,而C语言需要手动实现获取所有键的功能。 |
my_dict.values() | // 需要手动实现获取所有值的功能 | Python使用values() 方法获取字典的所有值,而C语言需要手动实现获取所有值的功能。 |
my_dict.items() | // 需要手动实现获取所有键值对的功能 | Python使用items() 方法获取字典的所有键值对,而C语言需要手动实现获取所有键值对的功能。 |
需要注意的是,Python的字典是动态的,可以随时添加或删除键值对。
而C语言的结构体大小是固定的,不能直接修改其成员变量。
在实际编程中,可以根据具体需求选择适合的语言特性来进行字典操作。
Python:
my_dict = {'a': 1, 'b': 2, 'c': 3}
for key, value in my_dict.items():
print(key, value)
C:
#include <stdio.h>
#include <string.h>
struct my_map {
char key[2];
int value;
};
int main() {
struct my_map my_map[] = {{"a", 1}, {"b", 2}, {"c", 3}};
int length = sizeof(my_map) / sizeof(my_map[0]);
for (int i = 0; i < length; i++) {
printf("%s %d\n", my_map[i].key, my_map[i].value);
}
}
5,集合
Python | C | 说明 |
---|---|---|
my_set = set() 或 my_set = {1, 2, 3} | #include <stdio.h> #include <setjmp.h> int main() { SetType my_set; set_init(&my_set); return 0; } | Python使用大括号{}或者set()函数来创建一个空集合,而C语言需要先定义一个集合类型,然后调用相应的初始化函数。 |
my_set.add(4) | set_insert(&my_set, 4); | 在Python中,可以使用add()方法向集合中添加单个元素;而在C语言中,需要调用特定的插入函数。 |
my_set.remove(2) | set_delete(&my_set, 2); | 在Python中,可以使用remove()方法从集合中删除指定元素;而在C语言中,需要调用特定的删除函数。 |
if 3 in my_set: | if (set_find(&my_set, 3) != NULL): | 在Python中,可以直接使用in关键字来检查元素是否在集合中;而在C语言中,需要调用特定的查找函数来判断元素是否存在。 |
len(my_set) | set_size(&my_set) | 在Python中,可以使用内置的len()函数来获取集合的大小;而在C语言中,需要调用特定的大小函数来获取集合的元素个数。 |
my_set.clear() | set_clear(&my_set); | 在Python中,可以使用clear()方法来清空集合;而在C语言中,需要调用特定的清空函数来移除所有元素。 |
Python:
# Python 使用 set() 函数创建集合,并支持多种集合操作
set1 = {1, 2, 3}
set2 = {3, 4, 5}
# 添加元素到集合中
set1.add(6)
print("Set1 after adding 6:", set1)
# 删除集合中的元素
set1.remove(2)
print("Set1 after removing 2:", set1)
# 检查元素是否在集合中
if 3 in set1:
print("3 is in Set1")
# 求两个集合的交集
intersection = set1 & set2
print("Intersection of Set1 and Set2:", intersection)
# 求两个集合的并集
union = set1 | set2
print("Union of Set1 and Set2:", union)
# 求两个集合的差集
difference = set1 - set2
print("Difference between Set1 and Set2:", difference)
C:
#include <stdio.h>
#include <stdbool.h>
int main() {
// C 使用数组表示集合,需要手动实现集合操作
int set1[] = {1, 2, 3};
int set2[] = {3, 4, 5};
int size1 = sizeof(set1) / sizeof(set1[0]);
int size2 = sizeof(set2) / sizeof(set2[0]);
// 添加元素到集合中(假设集合没有重复元素)
int new_element = 6;
bool found = false;
for (int i = 0; i < size1; i++) {
if (set1[i] == new_element) {
found = true;
break;
}
}
if (!found) {
printf("Adding %d to set1\n", new_element);
size1++; // 增加集合大小
}
// 删除集合中的元素(假设集合没有重复元素)
int element_to_remove = 2;
for (int i = 0; i < size1; i++) {
if (set1[i] == element_to_remove) {
for (int j = i; j < size1 - 1; j++) {
set1[j] = set1[j + 1];
}
size1--; // 减少集合大小
break;
}
}
// 检查元素是否在集合中
bool contains = false;
for (int i = 0; i < size1; i++) {
if (set1[i] == 3) {
contains = true;
break;
}
}
if (contains) {
printf("3 is in set1\n");
}
// 求两个集合的交集、并集和差集(这里只演示交集)
bool intersection[size1];
int intersect_count = 0;
for (int i = 0; i < size1; i++) {
for (int j = 0; j < size2; j++) {
if (set1[i] == set2[j]) {
intersection[intersect_count++] = set1[i];
break;
}
}
}
printf("Intersection of set1 and set2: ");
for (int i = 0; i < intersect_count; i++) {
printf("%d ", intersection[i]);
}
printf("\n");
return 0;
}