Python——做算法题时应该注意的细节

和Java类似,Python实现了丰富的基本数据结构,但是使用方式和Java有所不同


字符类型

  • Python中没有Java以及C++一样的字符类型,只有字符串类型

字符和数字的比较

  • 'a'表示的不是字符’a’, 而是字符串”a”,也就是说0 < 'a'这样的写法是不可以的,因为'a'不是一个数字
  • 若非要和数字比较,方式如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    string = "12_abc*ABZ-="
    alphanumeric_str = ""
    for char in string:
    if (ord(char) >= ord('0') and ord(char) <= ord('9'))\
    or (ord(char) >= ord('a') and ord(char) <= ord('z'))\
    or (ord(char) >= ord('A') and ord(char) <= ord('Z')):
    alphanumeric_str += char
    print(alphanumeric_str)

    # output:
    12abcABZ

集合类型的复制

浅拷贝

以list为例

1
2
3
4
5
6
7
8
l = [1, 2, 3]
# method 1
lcopy = l[:] # notice: ls.append(l[:]), 添加的是副本!!!
# method 2
lcopy = l.copy()
# method 3
import copy
lcopy = copy.copy(l)

深拷贝

1
2
3
4
import copy

l = [1, 2, 3, [4, 5, 6]]
l = copy.deepcopy(l)

format函数的使用

  • format是用于格化式字符串的函数

  • format是字符串自带的函数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # format string
    print "{} {}".format("hello", "world")
    print "{0} {1}".format("hello", "world")
    print "{1} {0} {1}".format("hello", "world")
    # output
    'hello world'
    'hello world'
    'world hello world'

    # format number
    print "{:.2f}".format(3.1415926)
  • 其他使用方式之后再补充


字符串到数字的转换

1
2
3
4
5
6
7
8
9
# string to integer, int(str, base=10)
a = "101"
integer = int(a, 10)
integer = int(a, 2)
integer = int(a, 7)

# string to float, float(str)
b = "123.4"
f = float(b)

进制转换

转换示例

1
2
3
4
5
6
7
8
9
# binary, octonary, hexadecimal to decimal(from string)
dec_num = int("1001", 2) # or int("0b1001", 2)
dec_num = int("657", 8) # or int("0657", 8)
dec_num = int("ff", 16) # or int("0xff", 16)

# decimal to binary, octonary, hexadecimal(or string)
bin_num = bin(123) # or str(bin(123))
oct_num = oct(123) # or str(oct(123))
hex_num = hex(123) # or str(hex(123))

总结:

  • 词的表示为十进制(123), 二进制(0b110), 八进制(0567), 十六进制(0xff1)
  • 词的转换函数如下:
十进制 二进制 八进制 十六进制
表示 123 0b110 0567 0xff1
函数 int bin oct hex

map函数的使用

定义

  • Python3

    1
    map(function, iterable, ...) -> map
  • Python2

    1
    map(function, iterable, ...) -> list

示例

1
2
3
4
5
6
7
8
9
10
11
12
# Python2
print map(lambda x: x**2, [1, 2, 3])
# output:
[1, 4, 9]

print map(lambda x, y: x+y, [1, 2, 3], [5, 6, 7])
# output:
[6, 8, 10]

# Python3
result = map(lambda x: x**2, [1, 2, 3])
print(list(result))