Python 剥离字符并合并列表对象
Python stripping characters and combine list objects
我有一个看起来类似于此的大量列表:
['red.color\xa0', '2020-11-27\xa0', 'green.color\xa0', '2020-11-27\xa0', 'blue.color\xa0', '2020-11-27\xa0']
我想弄清楚如何去掉 \xa0
个字符以及将每两个列表项组合起来,所以它最终会像:
[['red.color', '2020-11-27'], ['green.color', '2020-11-27'], ['blue.color', '2020-11-27']]
我试过了,但惨败:
for data in ugly:
data = data.strip("\xa0")
至于将所有其他列表项合并到一个新列表中,好吧,如果我在上面失败了,你可能会猜到我会崩溃。
我想你正在寻找这样的东西:
values = ['red.color\xa0', '2020-11-27\xa0', 'green.color\xa0', '2020-11-27\xa0', 'blue.color\xa0', '2020-11-27\xa0']
index = 0
result = []
while index < len(values):
result.append([values[index].strip("\xa0"), values[index + 1].strip("\xa0")])
index += 2
print(result) # prints [['red.color', '2020-11-27'], ['green.color', '2020-11-27'], ['blue.color', '2020-11-27']]
基本上步骤是:
- 创建一个名为 index 的变量,即 pair 中第一项的索引
- 创建一个名为 result 的变量,它将作为结果列表
- 进入 while 循环,遍历索引并附加每一对并删除它们
- 将索引变量增加 2,因为您在结果列表中添加了 2 个变量
你的做法是正确的,但是当你使用 for item in list 时,item 只是一个临时变量,改变它不会对原始列表产生任何影响。您应该使用这样的索引。
l = ['red.color\xa0', '2020-11-27\xa0', 'green.color\xa0', '2020-11-27\xa0', 'blue.color\xa0', '2020-11-27\xa0']
for i in range(len(l)):
l[i] = l[i].strip("\xa0")
l2 = []
for i in range(0,len(l),2):
l2.append([l[i], l[i+1]])
print(l2) #[['red.color', '2020-11-27'], ['green.color', '2020-11-27'], ['blue.color', '2020-11-27']]
\xa0
实际上是不间断的space。使用 List Comprehension
:
像下面一样替换它
In [3731]: ugly = ['red.color\xa0', '2020-11-27\xa0', 'green.color\xa0', '2020-11-27\xa0', 'blue.color\xa0', '2020-11-27\xa0']
In [3736]: x = [i.replace(u'\xa0', u'') for i in ugly]
现在,使用 zip
:
组合列表的每 2 个元素
In [3741]: y = [list(i) for i in zip(x[0::2], x[1::2])]
In [3742]: y
Out[3742]:
[['red.color', '2020-11-27'],
['green.color', '2020-11-27'],
['blue.color', '2020-11-27']]
要删除 '\xa0' 部分,您可以使用 string.replace('\xa0',"")
方法。
然后,您必须以 2 的步长范围遍历列表,并将当前元素与下一个元素配对。
您的代码可能看起来像这样:
list1 = ['red.color\xa0', '2020-11-27\xa0', 'green.color\xa0', '2020-11-27\xa0', 'blue.color\xa0', '2020-11-27\xa0']
list2 = [x.replace("\xa0", "") for x in list1]
new_list = list()
for x in range(0, len(list2), 2):
new_list.append([list2[x], list2[x+1]])
print(new_list)
我有一个看起来类似于此的大量列表:
['red.color\xa0', '2020-11-27\xa0', 'green.color\xa0', '2020-11-27\xa0', 'blue.color\xa0', '2020-11-27\xa0']
我想弄清楚如何去掉 \xa0
个字符以及将每两个列表项组合起来,所以它最终会像:
[['red.color', '2020-11-27'], ['green.color', '2020-11-27'], ['blue.color', '2020-11-27']]
我试过了,但惨败:
for data in ugly:
data = data.strip("\xa0")
至于将所有其他列表项合并到一个新列表中,好吧,如果我在上面失败了,你可能会猜到我会崩溃。
我想你正在寻找这样的东西:
values = ['red.color\xa0', '2020-11-27\xa0', 'green.color\xa0', '2020-11-27\xa0', 'blue.color\xa0', '2020-11-27\xa0']
index = 0
result = []
while index < len(values):
result.append([values[index].strip("\xa0"), values[index + 1].strip("\xa0")])
index += 2
print(result) # prints [['red.color', '2020-11-27'], ['green.color', '2020-11-27'], ['blue.color', '2020-11-27']]
基本上步骤是:
- 创建一个名为 index 的变量,即 pair 中第一项的索引
- 创建一个名为 result 的变量,它将作为结果列表
- 进入 while 循环,遍历索引并附加每一对并删除它们
- 将索引变量增加 2,因为您在结果列表中添加了 2 个变量
你的做法是正确的,但是当你使用 for item in list 时,item 只是一个临时变量,改变它不会对原始列表产生任何影响。您应该使用这样的索引。
l = ['red.color\xa0', '2020-11-27\xa0', 'green.color\xa0', '2020-11-27\xa0', 'blue.color\xa0', '2020-11-27\xa0']
for i in range(len(l)):
l[i] = l[i].strip("\xa0")
l2 = []
for i in range(0,len(l),2):
l2.append([l[i], l[i+1]])
print(l2) #[['red.color', '2020-11-27'], ['green.color', '2020-11-27'], ['blue.color', '2020-11-27']]
\xa0
实际上是不间断的space。使用 List Comprehension
:
In [3731]: ugly = ['red.color\xa0', '2020-11-27\xa0', 'green.color\xa0', '2020-11-27\xa0', 'blue.color\xa0', '2020-11-27\xa0']
In [3736]: x = [i.replace(u'\xa0', u'') for i in ugly]
现在,使用 zip
:
In [3741]: y = [list(i) for i in zip(x[0::2], x[1::2])]
In [3742]: y
Out[3742]:
[['red.color', '2020-11-27'],
['green.color', '2020-11-27'],
['blue.color', '2020-11-27']]
要删除 '\xa0' 部分,您可以使用 string.replace('\xa0',"")
方法。
然后,您必须以 2 的步长范围遍历列表,并将当前元素与下一个元素配对。
您的代码可能看起来像这样:
list1 = ['red.color\xa0', '2020-11-27\xa0', 'green.color\xa0', '2020-11-27\xa0', 'blue.color\xa0', '2020-11-27\xa0']
list2 = [x.replace("\xa0", "") for x in list1]
new_list = list()
for x in range(0, len(list2), 2):
new_list.append([list2[x], list2[x+1]])
print(new_list)