Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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列表中的for语句替换while循环_Python - Fatal编程技术网

用python列表中的for语句替换while循环

用python列表中的for语句替换while循环,python,Python,我必须创建一个汽车列表,一个显示汽车的函数,但用一个短语替换第四辆汽车,并调用该函数来分配任务。分级方案的一部分是使用for语句进行迭代,而不是while循环。它还说,它可以在不到10行代码中完成 我已经创建了一个while循环,它可以打印正确的列表,但是我无法成功地将其更改为for语句 def my_Assign3_challenge(cars): i=0 while i<len(cars): print(cars[i]) i=i+1 if i==3:

我必须创建一个汽车列表,一个显示汽车的函数,但用一个短语替换第四辆汽车,并调用该函数来分配任务。分级方案的一部分是使用for语句进行迭代,而不是while循环。它还说,它可以在不到10行代码中完成

我已经创建了一个while循环,它可以打印正确的列表,但是我无法成功地将其更改为for语句

def my_Assign3_challenge(cars):
  i=0
  while i<len(cars):
    print(cars[i])
    i=i+1
    if i==3:
      print("I would never buy that!")
      i=i+1
cars=["toyota","mitsubishi","dodge","ford","mini"]
my_Assign3_challenge(cars)
我还设法让第一个列表项无限期地重复了几次,但我现在找不到这样做的代码


如果有人能看看这个,告诉我哪里出了问题,我将不胜感激。我相信这只是一个简单的错误,因为我对编码非常陌生,但我希望您的帮助

函数中的for循环:

def my_Assign3_挑战(汽车):
对于车内x:
如果x!=三:
打印(x)
其他:
打印(“我永远不会买那个!”)
汽车=[“丰田”、“三菱”、“道奇”、“福特”、“迷你”]
我的任务3挑战(汽车)
输出

toyota
mitsubishi
dodge
ford
mini
您需要使用
.index()

守则是:

def my_Assign3_挑战(汽车):
对于车内x:
如果汽车。索引(x)!=三:
打印(x)
其他:
打印(“我永远不会买那个!”)
汽车=[“丰田”、“三菱”、“道奇”、“福特”、“迷你”]
我的任务3挑战(汽车)

您的
在循环遍历列表索引时

while i<len(cars):
  print(cars[i])
但是您仍然将
x
视为一个整数索引。
由于
x
现在是一系列品牌名称,它永远不会等于
3
。您需要决定以何种方式引用列表元素,并使第二组代码以这种方式一致使用。

我可以用三行代码来完成:

challenge = lambda x : [v if i !=3 else "I would never buy that!" for i, v in enumerate(x)]
cars=["toyota","mitsubishi","dodge","ford","mini"]
challenge(cars)
输出:

Out[54]: ['toyota', 'mitsubishi', 'dodge', 'I would never buy that!', 'mini']

.index(…)
调用将返回第一个匹配值的索引,因此当
cars=[“toyota”、“ford”、“dodge”、“ford”、“mini”]
时,上述解决方案将失败。请看一下产生(索引、值)的
枚举(…)
函数。谢谢!这让我走上了正确的道路,我明白了!lambda有什么意义?只需在丢失的comp中将
x
替换为
cars
,就可以用lambdata在任意输入列表上调用该函数,那么为什么不定义一个函数呢?lambda是无名函数。把它们赋给一个变量通常违背它们的目的…行数少,哈哈。行数少并不意味着代码更好。在大多数情况下甚至相反
challenge = lambda x : [v if i !=3 else "I would never buy that!" for i, v in enumerate(x)]
cars=["toyota","mitsubishi","dodge","ford","mini"]
challenge(cars)
Out[54]: ['toyota', 'mitsubishi', 'dodge', 'I would never buy that!', 'mini']