You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python有向图随机游走作业实现及示例代码原理讲解求助

参考代码原理解析

这段代码的核心是构建字符有向邻接表(也就是随机游走的状态转移图),统计字符串s中每个字符后面跟随的所有可能字符:

  • enumerate(s)是Python遍历可迭代对象的语法糖,会同时返回「元素下标」和「元素本身」。你有其他语言开发经验的话,可以理解为在普通遍历字符的逻辑外,额外维护了自增的下标变量i,i是当前字符c在字符串s中的位置,c就是当前遍历到的单个字符。
  • next是Python的字典结构(等价于其他语言的哈希表/Map),key为字符串中出现过的单个字符,value为列表类型,存储所有跟在该字符后方的相邻字符。next[c] = []的作用是,首次遇到字符c时,先为它在字典中初始化一个空列表,用于后续存储相邻字符。

举个实际运行的例子:原始字符串是Welcome to cs 477,首字符W后方跟着e,所以next['W']的列表会存入e;字符e在字符串中第一次出现时后方跟l,第二次出现在come末尾时后方跟空格,最终next['e']的值就是['l', ' ']。

参考代码的逐行逻辑:

  • 初始化空字典next用于存储状态转移图
  • 定义原始字符串s = "Welcome to cs 477"
  • 遍历字符串的每个下标i和对应字符c:
    • 如果c不在next的key中,就为它初始化一个空列表作为值
    • 如果当前字符不是字符串最后一位,就把下一个位置的字符s[i+1]追加到next[c]的列表中

随机游走实现思路

按照作业要求,你可以按以下逻辑补充代码:

  1. 导入Python内置的随机数模块:import random,其中random.choice()方法可以实现从列表中均匀随机选取元素,刚好满足多下一状态的随机选择要求。
  2. 定义最大游走长度,比如max_len = 15,数值可以自行调整。
  3. 初始化游走状态:起点为指定字符W,所以先定义current_char = 'W',用列表walk_result存储游走路径,初始值为[current_char]。
  4. 实现循环逻辑,循环终止条件有两个:要么路径长度达到最大长度,要么当前字符没有下一状态(即next[current_char]为空列表)。

参考实现代码:

import random

# 教授提供的参考代码(构建转移图的逻辑保持不变)
next = {} # This will hold the directed graph
s = "Welcome to cs 477"
# This loops through all of the characters in s
# and keeps track of their indices
for i, c in enumerate(s): 
    if not c in next:
        # If this is the first time seeing a particular 
        # character, we need to make a new key/value pair for it
        next[c] = []
    if i < len(s)-1: # If there is a character after this
        # Record that s[i+1] is one of the following characters
        next[c].append(s[i+1])

# 新增随机游走逻辑
max_length = 15
current = 'W'
walk = [current]

# 已经有1个初始字符,最多再走max_length-1步
for _ in range(max_length - 1):
    next_chars = next.get(current, [])
    # 没有下一状态直接终止循环
    if not next_chars:
        break
    # 均匀随机选择下一字符
    current = random.choice(next_chars)
    walk.append(current)

# 输出结果:把列表拼接为字符串
print("随机游走结果:", ''.join(walk))

相关Python基础知识点补充
  • Python字符串是可迭代对象,直接遍历即可拿到每个单个字符,不需要像部分语言一样手动调用charAt(i)按下标取字符
  • 字典的get(key, default)方法:如果key存在则返回对应值,不存在则返回传入的default值,比先判断key是否存在的写法更简洁
  • ''.join(列表)方法:可以把列表中的所有字符/字符串元素按顺序拼接为一个完整的字符串
  • random.choice(列表):从非空列表中等概率随机返回一个元素,无需自己实现随机数逻辑

内容的提问来源于stack exchange,提问作者user13508239

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 14:39:02