如何测试if语句中的数字是否在列表中?

时间:2012-03-26 15:54:53

标签: python

if ('0' or '13' or '26' or '39') in user and accumulator + 11 <= 21:
    accumulator += 11
    print 'ADDING 11!!!!!'
elif ('0' or '13' or '26' or '39') in user:
    accumulator + 1
    print 'ADDING 1'

这是整个计划的背景。我在那里有print语句用于调试目的,但是,我在if语句中遇到问题,确定0,13,26或39是否在列表中{{1}并且user不会超过21.我试过没有括号和单引号,任何建议?

4 个答案:

答案 0 :(得分:2)

如果您正在检查整数而不是包含ASCII数字的字符串,是的,请不要使用单引号。

你的意思是

if any(x in user for x in ('0', '13', '26', '39')) and accumulator + 11 <= 21:

它说的是什么 - 它会检查这些字符串中的任何一个(或数字,如果删除引号)都在列表user中。

您需要对elif进行相同的更改。

另外,你的意思是

accumulator += 1

而不是

accumulator + 1

答案 1 :(得分:0)

accumulator + 1

应该是

accumulator += 1

答案 2 :(得分:0)

正如@agf所提到的,对多个any使用or并对多个all使用and将是处理上述问题的自然方法,可以是使用set

的另一种方法

例如

给定

user1=['1','13','25']
and
user2=['0','1','13','14','26','27','39']

if ('0' or '13' or '26' or '39') in user1

通常写为

any(x in user1 for x in ['0' , '13' , '26' , '39'])

也可以写成

not set(['0' , '13' , '26' , '39']).isdisjoint(user1)
or
len(set(['0' , '13' , '26' , '39']).intersection(user1))>0

,同样

if ('0' and '13' and '26' and '39') in user2

通常写为

all(x in user2 for x in ['0' , '13' , '26' , '39'])

也可以写成

len(set(['0' , '13' , '26' , '39']).difference(user2)) == 0

所以回到你的问题,使用set intersection我们可以写为

if not set(['0' , '13' , '26' , '39']).isdisjoint(user1) and accumulator + 11 <= 21:
    accumulator += 11
    print 'ADDING 11!!!!!'
elif ('0' or '13' or '26' or '39') in user:
    accumulator += 1
    print 'ADDING 1'

答案 3 :(得分:0)

其他一些答案很好,但对于Python新手来说可能并不清楚。这里有一些更清晰的东西(但不是pythonic,在用户中没有查找号码的情况下可能更慢,等等......是的,我知道)。

lookup_numbers = ['0', '13', '26', '39']
num_found = False
for lookup_number in lookup_numbers:
  if lookup_number in user:
    num_found = True
    break

if num_found:
  if ((accumulator + 11) <= 21):
    accumulator += 11
  else:
    accumulator += 1

注意:如果您的用户列表包含字符串,请在 lookup_numbers 中保留每个条目的引号。如果包含整数,则删除引号。