2

Used a loop to add a bunch of elements to a list with mylist = []

for x in otherlist:
mylist.append(x[0:5])

But instead of the expected result ['x1','x2',...], I got: [u'x1', u'x2',...]. Where did the u's come from and why? Also is there a better way to loop through the other list, inserting the first six characters of each element into a new list?

4

3 回答 3

1

我上面的答案已经回答了“u”部分——字符串是用 Unicode 编码的。关于是否有更好的方法从列表中的项目中提取前 6 个字母:

>>> a = ["abcdefgh", "012345678"]
>>> b = map(lambda n: n[0:5], a);
>>> for x in b:
    print(x)

abcde
01234

因此,map将函数 ( lambda n: n[0:5]) 应用于 的每个元素a并返回一个新列表,其中包含每个元素的函数结果。更准确地说,在 Python 3 中,它返回一个迭代器,因此该函数仅根据需要被调用多次(即,如果您的列表有 5000 个项目,但您只从结果b中提取 10 个,则lambda n: n[0:5]仅被调用 10 次)。在 Python2 中,您需要改为使用itertools.imap

>>> a = [1, 2, 3]
>>> def plusone(x):
    print("called with {}".format(x))
    return x + 1

>>> b = map(plusone, a)
>>> print("first item: {}".format(b.__next__()))
called with 1
first item: 2

当然,您可以通过调用将函数“急切地”应用于每个元素list(b),这将为您提供一个普通列表,其中包含在创建时应用于每个元素的函数。

>>> b = map(plusone, a)
>>> list(b)
called with 1
called with 2
called with 3
[2, 3, 4]
于 2013-05-23T19:42:25.457 回答
1

u意思是unicode。它是 Python 的内部字符串表示形式(来自版本...?)。

大多数时候你不需要担心它。(直到你这样做。)

于 2013-05-23T19:31:11.777 回答
1

u 表示 unicode,你可能不需要担心它

mylist.extend(x[:5] for x in otherlist)
于 2013-05-23T19:31:46.997 回答