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']]

基本上步骤是:

  1. 创建一个名为 index 的变量,即 pair 中第一项的索引
  2. 创建一个名为 result 的变量,它将作为结果列表
  3. 进入 while 循环,遍历索引并附加每一对并删除它们
  4. 将索引变量增加 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)