Leetcode刷题总结——Python常用技巧

1,281 阅读2分钟

相比于Java语言,Python有许多不同之处,比如不同的语法,丰富的包库,以及一些更加灵活的编程技巧。
这里将我在Leetcode上刷题时用到一些常用的技巧做一个记录,加深印象。

1. 切片

在Java中,截取字符串会用到substring方法。

String text = "hello world!";
System.out.println(text.substring(1, 5));

而在Python中,使用的是切片。

text = "hello world!"
print(text[1:5])

对于列表和元组,同样可以使用切片。

array = [0, 1, 2, 3, 4, 5]
print(array[1: 5])

tuples = (0, 1, 2, 3, 4, 5)
print(tuples[1: 5])

image.png

2. 推导式

如果要根据一定的规则,创建或处理一个列表时,就可以使用推导式。

# 生成[0, 5)范围内的列表
list = [i for i in range(5)]
print(list)

其中,i 是由 for i in range(5) 生成的,然后将这些 i 放入列表 list 中。

image.png

相当于Java中的:

public static void main(String[] args) {
    List<Integer> list = new ArrayList<>();
    for (int i = 0; i < 5; i++) {
        list.add(i);
    }
    System.out.println(list);
}

推导式中可以加入条件:

# 列表中仅包含[0, 5)范围内的偶数
list = [i for i in range(5) if i % 2 == 0]
print(list)

image.png

相当于Java中的:

public static void main(String[] args) {
    List<Integer> list = new ArrayList<>();
    for (int i = 0; i < 5; i++) {
        if (i % 2 == 0) {
            list.add(i);
        }
    }
    System.out.println(list);
}

推导式也可以由多个for循环构成

# 列表由子列表构成,每个子列表中有两个数
# 第一个数是[0, 5)中的偶数,第二个数是[5, 10)中的奇数list = [[i, j] for i in range(5) if i % 2 == 0 for j in range(5, 10) if j % 2 != 0]
print(list)

image.png

相当于Java中的:

public static void main(String[] args) {
    List<List<Integer>> list = new ArrayList<>();
    for (int i = 0; i < 5; i++) {
        if (i % 2 == 0) {
            for (int j = 5; j < 10; j++) {
                if (j % 2 != 0) {
                    List<Integer> temp = new ArrayList<>();
                    temp.add(i);
                    temp.add(j);
                    list.add(temp);
                }
            }
        }
    }
    System.out.println(list);
}

推导式同样可以在字典和集合中使用

# 生成[0, 5)中的偶数及其平方的字典
dict = {i: i * i for i in range(5) if i % 2 == 0}
print(dict)

image.png

# 由列表生成满足条件的集合
list = [0, 1, 2, 3, 4]
sets = set(i for i in list if i % 2 == 0)
print(sets)

image.png

3. 日期处理

比如要计算某一个日期是星期几:

datetime.date(2022, 1, 1).strftime("%A")

相当于Java中的:

LocalDate.of(2022, 1, 1).getDayOfWeek().name();

Python中方便的一点是,可以使用strftime方法,来直接解析出不同的信息,具体可以参考: www.runoob.com/python/att-…

4. 字符串替换

python和Java中的字符串都是不可修改的,如果想进行修改,必须生成新的字符串对象。
Java可以通过字符数组进行修改:

public static void main(String[] args) {
    String str= "abc";
    char[] chars = str.toCharArray();
    chars[1] = 'd';
    String res = new String(chars);
    System.out.println(res);
}

Python可以通过list方法转为字符列表,然后再通过join方法生成字符串:

str = "abc"
chars = list(str)
chars[1] = 'd'
res = ''.join(chars)
print(res)

5. 无穷

在进行求最值的时候,经常会把初始值设置为最大值和最小值。

在Java中,可以使用Integer.MAX_VALUE/Integer.MIN_VALUEFloat.MAX_VALUE/Float.MIN_VALUELong.MAX_VALUE/Long.MIN_VALUE等等。

而在Python中,使用的是float('inf')float('-inf')来表示正无穷大和负无穷大。
无穷大的值比较特殊,如果对其做简单的算术运算,结果还是无穷大;如果对其乘以0,会得到nan,即not a number。如果用一个数除以无穷大,得到的结果会是0.0。
所以,一般不会用来对无穷大进行计算,更多的是进行大小比较。
即所有的数都比float('-inf')大,所有的数都比float('inf')小。