我在python中有一个列表:
list = ['hello there 123 456', 'hello there 234 567', 'hello there 345 678']
我想将其更改为:
list = ['123','234','345']
如何只保存每个索引的第一个整数?
第一个整数前面总是会有相同数量的字符条目/单词。
答案 0 :(得分:3)
如果您的列表是这样的:
list1 = [("hello", 'there', 123, 456, 789), ('hello', 'there', 234, 567, 890), ('hello', 'there', 345, 678, 912)]
然后简单地使用列表理解如下:
new_lst = [i[2] for i in list1]
new_lst
现在为[123, 234, 345]
使用新语法执行以下操作:
list = ['hello there 123 456', 'hello there 234 567', 'hello there 345 678']
new_lst = [i.split(' ')[2] for i in list1]
new_lst
现在会给出相同的结果
答案 1 :(得分:3)
以下是get_portion
功能
>>> def get_portion(s):
... return next(i for i in s.split() if i.isdigit())
...
>>> L = ['hello there 123 456', 'hello there 234 567', 'hello there 345 678']
>>> [get_portion(s) for s in L]
['123', '234', '345']
通过使用显式函数,您可以轻松编写doctests / unittests。以下是doctests
的示例def get_portion(n):
"""Return the first chunk of digits in a string.
>>> get_portion('hello there 123 456')
'123'
>>> get_portion('hello there 234 567')
'234'
>>> get_portion('hello there 345 678')
'345'
"""
return next(i for i in s.split() if i.isdigit())
答案 2 :(得分:0)
如果你不知道整数是在索引2,但是你知道“第一个整数前面总是会有相同数量的字符条目/单词。”,那么先在它上面加上一个测试。第一个找到该索引的元素:
ofst = None
for x, elem in enumerate(list1[0].split()):
try:
int(elem)
except ValueError:
continue
ofst = x
break
else:
print "No integer found."
return
new_lst = [i.split()[ofst] for i in list1]
答案 3 :(得分:0)
既然您的样本列表有效,我可以帮助您。
您可以使用list comprehension和str.split
:
>>> # Please don't name a variable `list` -- it overshadows the built-in.
>>> lst = ['hello there 123 456', 'hello there 234 567', 'hello there 345 678']
>>> [x.split()[2] for x in lst]
['123', '234', '345']
>>>
答案 4 :(得分:0)
好的,所以你有一个字符串列表:
['hello there 123 456', 'hello there 234 567', 'hello there 345 678']
并且你希望获得“第一个整数”,前缀总是相同的长度并且具有相同的空格数。
至少有三种方法可以做到:
哪一个最好?这取决于你在创建这种格式时最符合你头脑中的定义的规则 - 或者在创建它时在别人头脑中的定义,或者当你想出它时在头脑中的定义,或者......等等。它们都很容易做到,唯一的决定选择是哪一个自然地读取这个特定的用例。
然后,无论您选择哪一个,都需要对列表中的每个字符串执行此操作。列表理解是完美的。
所以:
new_list = [next(word for word in value if word.isdigit()) for value in original_list]
new_list = [value.split()[2] for value in original_list]
new_list = [value[12:15] for value in original_list]
答案 5 :(得分:0)
从给定列开始:
START_CH = 12
list = [s[START_CH:].split(1)[0] for s in list]
从给定的单词开始:
WORD = 3
list = [s.split(WORD)[WORD-1] for s in list]