拆分列表,提取一个元素并将其添加到 python
splitting list, extracting an element and adding it in python
我是 python 的新人。
我有一个分隔符为“::”的列表,看起来是这样;
1::Erin Burkovich (2000)::Drama
2::Assassins (1995)::Thriller
我想用“::”拆分它们并从名称中提取年份并将其添加到行尾。每部电影都有自己的索引。
想要的列表看起来像;
1::Erin Burkovich:Drama::2000
2::Assasins:Thriller:1995
我有以下代码:
for i in movies:
movie_id,movie_title,movie_genre=i.split("::")
movie_year=((movie_title.split(" "))[-1]).replace("(","").replace(")","")
movies.insert(-1, movie_year)
但根本不起作用。
有什么帮助吗?
提前致谢。
您可以使用 re.findall
来获取所有字母数字字符,包括空格,然后重新组合,而不是拆分:
import re
s = ['1::Erin Burkovich (2000)::Drama', '2::Assassins (1995)::Thriller']
new_data = [re.sub('\s(?=\:)', '', "{}::{}:{}:{}".format(id, name, type, year)) for id, name, year, type in [re.findall('[a-zA-Z0-9\s]+', i) for i in s]]
输出:
['1::Erin Burkovich:Drama:2000', '2::Assassins:Thriller:1995']
你有无限循环,因为当你添加一个项目时,你的循环需要迭代更多项目,然后你要添加另一个项目...
您应该使用结果创建一个新列表。
此外,您可以更轻松地提取列表:
movie_year = re.findall('\d+', '(2000)')
另一种(可能不太优雅)方式:
for i in movies:
split_list = i.split("::")
movie_id = split_list[0]
movie_title = split_list[1].split('(')
movie_genre = split_list[2]
print movie_id + '::' + movie_title[0].strip() + "::" + movie_genre + "::" + movie_title[1].strip(')')
对于 python 3.6,查看这个
a="""1::Erin Burkovich (2000)::Drama
2::Assassins (1995)::Thriller"""
a=a.split("\n")
c=[]
for b in range(len(a)):
g=[]
d=a[b].split("::")
e=d[1].split(" (")[1].split(")")[0]
f=d[1].split(" (")[0]
g.append(d[0])
g.append(f)
g.append(d[2])
g.append(e)
h="::".join(g)
c.append(h)
print("\n".join(c))
输出::
1::Erin Burkovich::Drama::2000
2::Assassins::Thriller::1995
很多问题,
split
不是return一个元组而是一个列表,所以不能直接赋值
- 电影年份划分没问题,但您没有从原始标题中删除年份
- 插入电影数组不是一个好主意,您需要替换数组元素
我已经根据您的需要重写了代码,希望对您有所帮助
movies=["1::Erin Burkovich (2000)::Drama", "2::Assassins (1995)::Thriller"]
for i in range(len(movies)):
movie_details=movies[i].split("::")
print movie_details
movie_id=movie_details[0]
movie_title=movie_details[1]
movie_genre=movie_details[2]
movie_title_parts=movie_title.split(" ")
movie_year=((movie_title_parts[-1]).replace("(","").replace(")",""))
del movie_title_parts[-1]
movie_title=" ".join(movie_title_parts)
print movie_title+", "+movie_year
movies[i]=movie_id+"::"+movie_title+"::"+movie_genre+"::"+movie_year
我是 python 的新人。
我有一个分隔符为“::”的列表,看起来是这样;
1::Erin Burkovich (2000)::Drama
2::Assassins (1995)::Thriller
我想用“::”拆分它们并从名称中提取年份并将其添加到行尾。每部电影都有自己的索引。
想要的列表看起来像;
1::Erin Burkovich:Drama::2000
2::Assasins:Thriller:1995
我有以下代码:
for i in movies:
movie_id,movie_title,movie_genre=i.split("::")
movie_year=((movie_title.split(" "))[-1]).replace("(","").replace(")","")
movies.insert(-1, movie_year)
但根本不起作用。
有什么帮助吗?
提前致谢。
您可以使用 re.findall
来获取所有字母数字字符,包括空格,然后重新组合,而不是拆分:
import re
s = ['1::Erin Burkovich (2000)::Drama', '2::Assassins (1995)::Thriller']
new_data = [re.sub('\s(?=\:)', '', "{}::{}:{}:{}".format(id, name, type, year)) for id, name, year, type in [re.findall('[a-zA-Z0-9\s]+', i) for i in s]]
输出:
['1::Erin Burkovich:Drama:2000', '2::Assassins:Thriller:1995']
你有无限循环,因为当你添加一个项目时,你的循环需要迭代更多项目,然后你要添加另一个项目...
您应该使用结果创建一个新列表。
此外,您可以更轻松地提取列表:
movie_year = re.findall('\d+', '(2000)')
另一种(可能不太优雅)方式:
for i in movies:
split_list = i.split("::")
movie_id = split_list[0]
movie_title = split_list[1].split('(')
movie_genre = split_list[2]
print movie_id + '::' + movie_title[0].strip() + "::" + movie_genre + "::" + movie_title[1].strip(')')
对于 python 3.6,查看这个
a="""1::Erin Burkovich (2000)::Drama
2::Assassins (1995)::Thriller"""
a=a.split("\n")
c=[]
for b in range(len(a)):
g=[]
d=a[b].split("::")
e=d[1].split(" (")[1].split(")")[0]
f=d[1].split(" (")[0]
g.append(d[0])
g.append(f)
g.append(d[2])
g.append(e)
h="::".join(g)
c.append(h)
print("\n".join(c))
输出::
1::Erin Burkovich::Drama::2000
2::Assassins::Thriller::1995
很多问题,
split
不是return一个元组而是一个列表,所以不能直接赋值- 电影年份划分没问题,但您没有从原始标题中删除年份
- 插入电影数组不是一个好主意,您需要替换数组元素
我已经根据您的需要重写了代码,希望对您有所帮助
movies=["1::Erin Burkovich (2000)::Drama", "2::Assassins (1995)::Thriller"]
for i in range(len(movies)):
movie_details=movies[i].split("::")
print movie_details
movie_id=movie_details[0]
movie_title=movie_details[1]
movie_genre=movie_details[2]
movie_title_parts=movie_title.split(" ")
movie_year=((movie_title_parts[-1]).replace("(","").replace(")",""))
del movie_title_parts[-1]
movie_title=" ".join(movie_title_parts)
print movie_title+", "+movie_year
movies[i]=movie_id+"::"+movie_title+"::"+movie_genre+"::"+movie_year