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]的列表中
- 如果
随机游走实现思路
按照作业要求,你可以按以下逻辑补充代码:
- 导入Python内置的随机数模块:
import random,其中random.choice()方法可以实现从列表中均匀随机选取元素,刚好满足多下一状态的随机选择要求。 - 定义最大游走长度,比如
max_len = 15,数值可以自行调整。 - 初始化游走状态:起点为指定字符
W,所以先定义current_char = 'W',用列表walk_result存储游走路径,初始值为[current_char]。 - 实现循环逻辑,循环终止条件有两个:要么路径长度达到最大长度,要么当前字符没有下一状态(即
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
相关产品推荐
相关产品推荐

