用于识别类型的Split()

时间:2016-07-19 08:24:09

标签: python types

我有这样一句话:

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]都是一个字符串。

我可以做一些让我的程序识别此列表中的整数的东西吗?

7 个答案:

答案 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