问题11:range() 函数语法详解
基本语法
range(stop) range(start, stop) range(start, stop, step)
参数说明
start
:序列的起始值(可选,默认为0)
stop
:序列的结束值(不包含)
step
:步长(可选,默认为1)
返回值
- 返回一个 range 对象,这是一个可迭代对象
- 不是列表,但可以转换为列表
功能说明
range()
是 Python 的内置函数,用于生成一个不可变的数字序列
- 内存效率高,不会立即生成所有数字
- 支持负数步长
基本示例
print(list(range(5))) print(list(range(1, 6))) print(list(range(0, 10, 2))) print(list(range(5, 0, -1))) print(list(range(10, 0, -2))) print(list(range(0))) print(list(range(1, 1))) print(list(range(5, 1)))
常见用法
for i in range(5): print(i, end=\' \') squares = [x**2 for x in range(5)]print(squares) fruits = [\'apple\', \'banana\', \'orange\']for i in range(len(fruits)): print(f\"{i}: {fruits[i]}\")for i in range(len(fruits)-1, -1, -1): print(f\"{i}: {fruits[i]}\")
高级用法
def arithmetic_sequence(start, end, step): return list(range(start, end + 1, step))print(arithmetic_sequence(1, 10, 2)) def geometric_sequence(start, ratio, count): return [start * (ratio ** i) for i in range(count)]print(geometric_sequence(1, 2, 5)) def create_matrix(rows, cols): matrix = [] for i in range(rows): row = [] for j in range(cols): row.append(i * cols + j) matrix.append(row) return matrixprint(create_matrix(3, 3))def sliding_window(data, window_size): for i in range(len(data) - window_size + 1): yield data[i:i + window_size]data = [1, 2, 3, 4, 5]for window in sliding_window(data, 3): print(window)
性能特点
import syslarge_range = range(1000000)large_list = list(range(1000000))print(f\"range 对象大小:{sys.getsizeof(large_range)} 字节\")print(f\"列表大小:{sys.getsizeof(large_list)} 字节\")import timestart = time.time()for i in range(1000000): passrange_time = time.time() - startstart = time.time()for i in list(range(1000000)): passlist_time = time.time() - startprint(f\"range 迭代时间:{range_time:.6f}秒\")print(f\"列表迭代时间:{list_time:.6f}秒\")
实际应用场景
for i in range(10): print(f\"倒计时:{10-i}\")names = [\'Alice\', \'Bob\', \'Charlie\']for i in range(len(names)): print(f\"{i+1}. {names[i]}\")def repeat_operation(func, times): for _ in range(times): func()def sum_range(start, end): return sum(range(start, end + 1))print(sum_range(1, 100)) def simulate_time(hours): for hour in range(hours): for minute in range(60): for second in range(60): yield f\"{hour:02d}:{minute:02d}:{second:02d}\"for time_str in simulate_time(1): print(time_str) break
常见错误和注意事项
print(list(range(5))) print(list(range(5, 1))) print(list(range(1, 6))) r = range(5)print(type(r)) print(r[2]) print(r[1:3])
与其他序列生成方法的对比
方法 |
语法 |
特点 |
适用场景 |
range() |
range(start, stop, step) |
内存效率高,整数序列 |
循环、索引 |
list() |
list(range()) |
立即生成所有元素 |
需要列表操作 |
enumerate() |
enumerate(iterable) |
同时获取索引和值 |
遍历时需索引 |
itertools.count() |
count(start, step) |
无限序列 |
无限循环 |
最佳实践
for i in range(10): print(i)fruits = [\'apple\', \'banana\', \'orange\']for i, fruit in enumerate(fruits): print(f\"{i}: {fruit}\")squares = [x**2 for x in range(10)]for i in range(len(fruits)-1, -1, -1): print(fruits[i])for i in range(0, 100, 10): print(i)
高级技巧
class CustomRange: def __init__(self, start, stop, step=1): self.start = start self.stop = stop self.step = step def __iter__(self): current = self.start while current < self.stop: yield current current += self.stepfor i in CustomRange(1, 10, 2): print(i) def fibonacci_range(n): a, b = 0, 1 for _ in range(n): yield a a, b = b, a + bprint(list(fibonacci_range(10))) def conditional_range(start, stop, condition): for i in range(start, stop): if condition(i): yield ieven_numbers = list(conditional_range(1, 20, lambda x: x % 2 == 0))print(even_numbers)