我有这样一句话:
a='Hello I have 4 ducks'
我将str.split
应用于此,所以我现在有
>>> a.split()
['Hello','I','have','4','ducks'].
问题是每个a.split()[i]
都是一个字符串,但我需要程序识别4是一个整数。我需要知道第一个整数在哪个位置,所以我这样做:
if(isinstance(a[i], float) or isinstance(a[i], int)):
punt=k
但每个a[i]
都是一个字符串。
我可以做一些让我的程序识别此列表中的整数的东西吗?
答案 0 :(得分:0)
你没有定义你想要的输出,因此我不确定这是否是你想要的,但是它有效:
a='Hello I have 4 ducks'
a=a.split()
ints=[]
strings=[]
for part in a:
try:
ints.append(int(part))
except:
strings.append(part)
ints,strings
给出:
([4], ['Hello', 'I', 'have', 'ducks'])
如果您想要一个类型列表,那么您可以这样修改:
types = []
for part in a:
try:
int(part)
types.append('int')
except:
types.append('string')
types
给出:
类型
['string', 'string', 'string', 'int', 'string']
答案 1 :(得分:0)
demo_list = ['Hello','I','have','4','ducks']
i=0
for temp in demo_list:
print temp
if temp.isdigit():
print "This is digit"
print "It is present at location - ", i
i=i+1
输出: 这是数字。
它存在于位置-3
答案 2 :(得分:0)
您可以定义自己的split()
版本。在这里,我将其命名为my_split()
。
def my_split(astring):
return [find_type(x) for x in astring.split()]
def find_type(word):
try:
word_type = int(word)
except ValueError:
try:
word_type = float(word)
except ValueError:
word_type = word
return word_type
a = 'Hello I have 4 ducks weighing 3.5 kg each'
split_type = [x for x in my_split(a)]
print(split_type)
#['Hello', 'I', 'have', 4, 'ducks', 'weighing', 3.5, 'kg', 'each']
print([type(x) for x in my_split(a)])
#[<class 'str'>, <class 'str'>, <class 'str'>, <class 'int'>, <class 'str'>, <class 'str'>, <class 'float'>, <class 'str'>, <class 'str'>]
for i, word in enumerate(split_type):
if type(word) == int:
print('Integer found at position {:d}'.format(i + 1))
# Returns: 'Integer found at position 4'
答案 3 :(得分:0)
split()
不会这样做,因为它特定于字符串。
但是,您可以对split
的输出进行后处理,以检查其输出的每个元素是否可以转换为整数per this answer。类似的东西:
def maybeCoerceInt(s):
try:
return int(s)
except ValueError:
return s
tokens = a.split()
for i in range(len(tokens)):
tokens[i] = maybeCoerceInt(tokens[i])
哪个产生
>>> print(tokens)
['Hello', 'I', 'have', 4, 'ducks']
答案 4 :(得分:0)
你可以使用isdigit功能
a='Hello I have 4 ducks'
i=0
for x in a.split():
i+=1
if x.isdigit():
print "Element:"+x
print "Position:"+i
答案 5 :(得分:0)
可能使用异常是最好的方法。 (见here)。其他方法(如isdigit
)不适用于负数。
def is_number(s):
try:
float(s)
return True
except ValueError:
return False
另请注意:
float('NaN')
nan
然后你可以使用:
if is_number(a[i]):
punt=k
答案 6 :(得分:0)
您可以使用eval
功能来执行此操作,这是我的回答:
a = 'Hello I have 4 ducks weighing 3 kg each'
a = a.split()
print a
for i in a:
try:
if isinstance(eval(i), int):
print "the index of {i} is {index}".format(i=i, index=a.index(i))
except NameError:
pass
# the results
['Hello', 'I', 'have', '4', 'ducks', 'weighing', '3', 'kg', 'each']
the index of 4 is 3
the index of 3 is 6