英文:
is it possible to .index a repeated item?
问题
在mylist
中索引第二个7,你可以使用以下代码:
second_seven_index = mylist.index(7, mylist.index(7) + 1)
这将返回第二个7的索引位置。如果要在spy_game
函数中修改代码以检查是否包含007,可以使用以下代码:
def spy_game(nums):
zeros = []
for num in nums:
if num == 0:
zeros.append(num)
elif num == 7 and len(zeros) >= 2:
return True
return False
这个函数将检查列表中是否按顺序包含至少两个0和一个7,如果是则返回True,否则返回False。
英文:
Is it possible to .index
a repeated item? for example in mylist=[1,2,7,8,7,12] how can I .index
the second 7?
mylist.index(7)
just gives me the place of the first seven.
How can i get the placenumber of the second seven?
#### SPY GAME: Write a function that takes in a list of integers and returns True if it contains 007 in order
spy_game([1,2,4,0,0,7,5]) --> True
spy_game([1,0,2,4,0,5,7]) --> True
spy_game([1,7,2,0,4,5,0]) --> False
def spy_game(nums): ####this only work when the second 0 not in after the 7
while 0 in nums and 7 in nums and nums.count(0)>=2:
if nums.index(7)>nums.index(0):
return True
else:
return False
else:
return False
答案1
得分: 1
你可以从输入列表中只使用0和7构建一个字符串,然后可以在该字符串中搜索'007'。
像这样:
def spy_game(n: list[int]) -> bool:
return '007' in ''.join(map(str, (v for v in n if v in {0, 7})))
print(spy_game([1,2,4,0,0,7,5]))
print(spy_game([1,0,2,4,0,5,7]))
print(spy_game([1,7,2,0,4,5,0]))
输出:
True
True
False
选项:
如果你不想构建字符串,可以像下面这样使用整数:
def spy_game(n: list[int]) -> bool:
jb = (0, 0, 7)
t = [v for v in n if v in {0, 7}]
for _t in zip(t, t[1:], t[2:]):
if _t == jb:
return True
return False
英文:
You can construct a string using only 0s and 7s from the input list then you can just search for '007' in that string.
Like this:
def spy_game(n: list[int]) -> bool:
return '007' in ''.join(map(str, (v for v in n if v in {0, 7})))
print(spy_game([1,2,4,0,0,7,5]))
print(spy_game([1,0,2,4,0,5,7]))
print(spy_game([1,7,2,0,4,5,0]))
Output:
True
True
False
Option:
If you don't want to build strings then just use the integers as follows:
def spy_game(n: list[int]) -> bool:
jb = (0, 0, 7)
t = [v for v in n if v in {0, 7}]
for _t in zip(t, t[1:], t[2:]):
if _t == jb:
return True
return False
答案2
得分: 0
以下是翻译好的代码部分:
用切片的方式来实现:
a = [0, 0, 7, 1, 5, 6]
b = [0, 7, 0, 1, 5, 6, 7, 5, ]
c = [7, 0, 0, 1, 4, 5, 6]
d = [0, 7, 0, 7]
def spy_game(l: list[int]) -> bool:
try:
ind1 = l.index(0)
ind2 = l[ind1 + 1:].index(0)
ind3 = l[ind1 + ind2 + 1:].index(7) # 可以替换为 if 7 in l[ind1+ind2:]
return True
except ValueError:
return False
print(spy_game(a))
print(spy_game(b))
print(spy_game(c))
print(spy_game(d))
请注意,如果值在列表中不存在,.index 将引发 ValueError 异常。
英文:
The way I would do it with slicing:
a = [0, 0, 7, 1, 5, 6]
b = [0, 7, 0, 1, 5, 6, 7, 5, ]
c = [7, 0, 0, 1, 4, 5, 6]
d = [0, 7, 0, 7]
def spy_game(l: list[int]) -> bool:
try:
ind1 = l.index(0)
ind2 = l[ind1 + 1:].index(0)
ind3 = l[ind1 + ind2 + 1:].index(7) # can replace with if 7 in l[ind1+ind2:]
return True
except ValueError:
return False
print(spy_game(a))
print(spy_game(b))
print(spy_game(c))
print(spy_game(d))
notice that if the value doesn't exist in the list .index will raise a ValueError
答案3
得分: -1
根据已有的评论建议,有更简单的方法可以做到这一点。但是,对于你的具体问题,你可以使用:
mylist = [1, 2, 7, 8, 7, 12]
[i for i, x in enumerate(mylist) if x == 7]
通过使用一个列表生成器遍历mylist
中的索引和项对,你可以检查项是否等于7,如果是的话,保存该项的索引。
英文:
As the comments already suggest, there are easier ways to do so. However, for your specific question, you could use:
mylist=[1,2,7,8,7,12]
[i for i,x in enumerate(mylist) if x == 7]
>>> [2,4]
By using a list generator looping over the pairs (index, item) in mylist
, you can check whether the item is equal to 7, and if so, save the index of that item.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论