Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中带有数组/列表的基本循环概念_Python_Arrays_List_Loops_Arraylist - Fatal编程技术网

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

python中带有数组/列表的基本循环概念,python,arrays,list,loops,arraylist,Python,Arrays,List,Loops,Arraylist,我知道这将是一个非常新手的问题,但我有点茫然,需要立即解决这个问题 我想更改S->B等的值,如下面代码中所述。为此,我可以创建数组或列出“A=[S,B,N]”或任何需要的内容。但需要以这种方式进行遍历 S --> B B --> S S --> N N --> B B --> N N --> S 我尝试创建两个具有相同值[S,B,N]的列表A和B,并使用 i=0;i<length.A;i++ j=0;j<length.B;j++ i=0

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

我想更改S->B等的值,如下面代码中所述。为此,我可以创建数组或列出“A=[S,B,N]”或任何需要的内容。但需要以这种方式进行遍历

S --> B 
B --> S
S --> N
N --> B
B --> N
N --> S
我尝试创建两个具有相同值[S,B,N]的列表A和B,并使用

i=0;i<length.A;i++
   j=0;j<length.B;j++

i=0;我我想这应该能回答你的问题,我知道我改变字母的列表并不完全相同,但我认为从这里你应该能够实现它

它将每个s更改为b,b更改为n,n更改为s

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]
所以在随机字母列表的前后:

 ['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']

据我所知,你们有一个特定的状态序列: S->B->S->N->B->N->[重新开始]

这可以通过发电机解决,例如:

import itertools
state = itertools.cycle(['S', 'B', 'S', 'N', 'B', 'N'])
后续调用next(state)将按顺序生成列表,从开始到结束。例如:

>>> 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'

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

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)
如果在没有索引的情况下调用函数,则假定它是遍历顺序中的第一次出现。
请注意星号:*元素。它为函数调用解包元组。

这不是Python!我说过这是假的。但是这个概念在python中是必需的。你能给出一个输入和想要的输出的例子吗,因为在你现在提供的内容中,S可以转换为B和N,B到S和N,N到B和S。那么这背后的逻辑是什么呢?设置
j=0
,如果
A[i]
不是
B[j]
(假设这就是你想要的)@vig3:我的输入是一个列表
list1=[S,B,N]
我有一个cmd,它可以将系统状态从S更改为B。一旦更改,系统状态将更改为B。现在我只能从状态B执行任何步骤。@标记,因此如果
j=0
,它将不会反映循环j的步骤2。Python确实包含电池:-)
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)