打印python列表中找到的两个字符外观

时间:2013-08-15 12:43:02

标签: python list

第一次来这里(以及编程菜鸟),希望我的格式正确!

我正在尝试创建一个函数,它将打印出列表中发出的所需信件的位置。下面的代码找到了这个字母并打印出字母在列表中的位置,即如果你搜索'a',程序将在第二个点(x + 1)回答它。

问题是,如果我搜索一个有一个以上副本的字母(例如字母'e'),程序会在两个位置找到该字母但在两种情况下都打印出它在第10个位置。

我试图找出原因,在这种情况下应该是第10和第17。

# store string in variable
solution = list('can you guess me')
guess = raw_input('What letter do you guess on? ')

# Search list
def search(guess):
  nothing = 0
  for x in solution:
      if x == guess: 
          print x, 
          print "is in ", 
          print solution.index(x) + 1
          nothing = 1

  if nothing == 0:
      print "Couldn't find ", 
      print guess

search(guess)

如果选择e,就像这样:

What letter do you think is in the answer?  e

程序打印出来:

e is in  11
e is in  11

我想知道原因。 :/

2 个答案:

答案 0 :(得分:3)

这种方法怎么样:

solution = 'This is the solution'

# Search list
def search(guess):
    return [i for i,x in enumerate(solution) if x == guess]

guess = raw_input('Enter your guess: ')
result = search(guess)
if result:
   positions = ','.join(str(i+1) for i in result)
   print('{0} was found in positions {1}'.format(guess, positions))
else:
   print('Sorry, {0} was not found!'.format(guess))

我们在这里做的是逐步完成解决方案,如果一个角色与猜测匹配,我们将返回其位置。如果没有匹配的字符,则该方法将返回一个空列表;这是 falsey 值。

然后,我们只检查方法的返回值。如果它是一个列表,我们将1添加到该位置(因为列表索引从0开始),然后将它们打印出来。

答案 1 :(得分:2)

solution.index(x)会对您进行相同的搜索,但只返回第一次匹配。

使用enumerate()来创建索引:

for i, x in enumerate(solution):
    if x == guess: 
        print x, 
        print "is in ", 
        print i + 1
        nothing = 1

另一种方法是告诉solution.index()从哪里开始搜索。您打印的上一个位置,例如:

last = -1
for x in solution:
    if x == guess: 
        print x, 
        print "is in ", 
        last = solution.index(x, last) + 1
        print last 
        nothing = 1