python中带有数组/列表的基本循环概念
我知道这将是一个非常新手的问题,但我有点茫然,需要立即解决这个问题 我想更改S->B等的值,如下面代码中所述。为此,我可以创建数组或列出“A=[S,B,N]”或任何需要的内容。但需要以这种方式进行遍历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
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)