Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将字符串拆分为固定数量的元素_Python_String_List - Fatal编程技术网

Python 将字符串拆分为固定数量的元素

Python 将字符串拆分为固定数量的元素,python,string,list,Python,String,List,我需要把一根绳子一分为二。如果字符串不包含分隔符,我需要第二个字符串为None。下面的代码可以工作,但对于它所做的事情来说似乎太冗长了。有没有更优雅的方法 def splitter(item): elements = item.split('_') first = elements[0] if len(elements) == 1: elements.append(None) second = elements[1] return firs

我需要把一根绳子一分为二。如果字符串不包含分隔符,我需要第二个字符串为
None
。下面的代码可以工作,但对于它所做的事情来说似乎太冗长了。有没有更优雅的方法

def splitter(item):
    elements = item.split('_')
    first = elements[0]
    if len(elements) == 1:
        elements.append(None)
    second = elements[1]
    return first, second

mylist = ['do_this', 'do_that', 'do_somethingelse', 'stayput', 'sleep']

for item in mylist:
    print(splitter(item))

# Output:
# ('do', 'this')
# ('do', 'that')
# ('do', 'somethingelse')
# ('stayput', None)
# ('sleep', None)

你的代码看起来不错

您可以这样做:

def splitter(item, delimiter):
    if delimiter in item:
        return  tuple(item.split(delimiter))
    else:
        return (item, None)

mylist = ['do_this', 'do_that', 'do_somethingelse', 'stayput', 'sleep']

for item in mylist:
    print(splitter(item, "_"))
顺便问一下,您是否100%确定您的字符串中只有一个“u”?

您也可以试试

def分离器(项目):
零件=项目拆分(“”)
返回零件+[无]*(2-透镜(零件))

列表中的每个项目都有一个足够简单的一行:

mylist = ['do_this', 'do_that', 'do_somethingelse', 'stayput', 'sleep']
for item in mylist:
    item_1, item_2 = item.split('_')[0], item.split('_')[1] if len(item.split('_')) != 1 else None
    print(item_1, item_2)

#Output:
#do this
#do that
#do somethingelse
#stayput None
#sleep None
下面是整个列表的完整一行代码,它将每一对放入列表中的元组中:

newlist = [(item.split('_')[0], item.split('_')[1] if len(item.split('_')) != 1 else None) for item in mylist]

#Output:
#[('do', 'this'), ('do', 'that'), ('do', 'somethingelse'), ('stayput', None), ('sleep', None)]

修改这些内容应该很容易,因此输出的格式是您想要的(列表、元组等)。

非常感谢。我本来希望这会是一个一行,但你的建议是短得多,好得多,无论如何。顺便说一句,是的,只有一个下划线。