首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python中数组/列表的基本循环概念

python中数组/列表的基本循环概念
EN

Stack Overflow用户
提问于 2018-02-23 15:40:12
回答 3查看 579关注 0票数 0

我知道这将是一个非常新手的问题,但我有点空白,需要立即解决这个问题。

我想更改S、->、B等值,就像下面代码中提到的那样。为此,我可以创建数组或列表"A = S,B,N“或任何需要的东西。但是需要以这种方式遍历。

代码语言:javascript
运行
复制
S --> B 
B --> S
S --> N
N --> B
B --> N
N --> S

我尝试使用相同的值S、B、N创建2个列表A和B,并使用以下命令遍历它们

代码语言:javascript
运行
复制
i=0;i<length.A;i++
   j=0;j<length.B;j++

代码语言:javascript
运行
复制
i=0;i<length.A;i++
   j=i;j<length.B;j++

但在场景1中:S更改为B,然后尝试从S -> N进行更改,这是不可能的。在场景2中:我们达到了6个输出中的4个,但不是所有6个必需的输出。

我本可以做更多的研究,但由于缺乏时间,我不能。

此外,我还以伪方式编写了代码。

EN

回答 3

Stack Overflow用户

发布于 2018-02-23 16:31:03

据我所知,您有一个特定的状态序列:S -> B -> S -> N -> B -> N -> have

这可以用生成器来解决,比如:

代码语言:javascript
运行
复制
import itertools
state = itertools.cycle(['S', 'B', 'S', 'N', 'B', 'N'])

对next(state)的后续调用将按顺序生成列表,当列表到达末尾时从开始开始。示例:

代码语言:javascript
运行
复制
>>> next(state)
'S'
>>> next(state)
'B'
>>> next(state)
'S'
>>> next(state)
'N'
>>> next(state)
'B'
>>> next(state)
'N'
>>> next(state)
'S'
>>> next(state)
'B'
>>> next(state)
'S'
>>> next(state)
'N'
>>> next(state)
'B'
票数 1
EN

Stack Overflow用户

发布于 2018-02-23 16:04:38

我认为这应该可以回答你的问题,我知道我的改变字母的列表并不完全相同,但我认为从这里开始你应该能够实现它。

它把每个s变成b,b变成n,n变成s。

代码语言:javascript
运行
复制
lettersToChange = ['s','b','n']

randomLetters = ['k','l','m','n','s','s','b','n','b','n','s','b','n','b','s']
for i in range(len(randomLetters)):
    if randomLetters[i] in lettersToChange:
        pos = lettersToChange.index(randomLetters[i])
        randomLetters[i] = lettersToChange[(pos+1)%3]

所以在randomLetters列表之前和之后:

代码语言:javascript
运行
复制
 ['k', 'l', 'm', 'n', 's', 's', 'b', 'n', 'b', 'n', 's', 'b', 'n', 'b', 's']
 ['k', 'l', 'm', 's', 'b', 'b', 'n', 's', 'n', 's', 'b', 'n', 's', 'n', 'b']
票数 0
EN

Stack Overflow用户

发布于 2018-02-23 16:37:50

如果我理解正确的话,你必须有一个索引,因为你必须区分,哪一个S、B或N应该前进到它的下一个状态。大概是这样的:

代码语言:javascript
运行
复制
TRAVERSE_ORDER = "SBSNBN"
EXAMPLE_INPUT = ["S", "B", "N"]

def traverse_single_item(state, state_index=0):
    next_state = TRAVERSE_ORDER.find(state, state_index) + 1
    if next_state == len(TRAVERSE_ORDER):
        next_state = 0
    return (TRAVERSE_ORDER[next_state], next_state)

new_state = [traverse_single_item(*elem) for elem in EXAMPLE_INPUT]
print(new_state)

newer_state = [traverse_single_item(*elem) for elem in new_state]
print(newer_state)

newest_state = [traverse_single_item(*elem) for elem in newer_state]
print(newest_state)

如果在没有索引的情况下调用函数,则假定它是遍历顺序中的第一个匹配项。请注意星号:*elem。它为函数调用解包元组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48943285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档