扭曲列表列表
Flatten list of lists with a twist
我有以下数据结构:
a= [
[u'happy', u'thursday', u'from', u'my', u'big', u'sweater', u'and', u'this',
u'ART', u'@', u'East', u'Village', u',', u'Manhattan', u'https',
u':', u'//t.co/5k8PUInmqK'],
[u'RT', u'@', u'MayorKev', u':', u'IM', u'SO', u'HYPEE', u'@', u'calloutband',
u'@', u'FreakLikeBex', u'#', u'Callout', u'#', u'TheBitterEnd', u'#',
u'Manhattan', u'#', u'Music', u'#', u'LiveMusic', u'#', u'NYC',
u'#', u'NY', u'#',
u'Jersey', u'#', u'NJ', u'http', u':', u'//t.co/0\u2026']
]
在我看来,它是一个字符串列表的列表,除了它被一对 [ ] 而不是 ( ) 包围。 [ ] 对是系统生成的结果:
a = [nltk.tokenize.word_tokenize(tweetL) for tweetL in tweetList]
最终,我需要将这个结构展平为一个字符串列表,并对单词进行一些正则表达式和计数操作,但是 [ ] 的外部对阻止了这一点。
我尝试使用:
list.extend()
和
ll = len(a)
for n in xrange(ll):
print 'list - ', a[n], 'number = ', n
但仍然得到相同的结果:
list - [ number = 1
list - u number = 2
list - ' number = 3
list - h number = 4
list - a number = 5
list - p number = 6
list - p number = 7
如您所见,代码将字符串的每个符号视为列表的元素,而不是将整个字符串视为一个元素
可以高效地完成哪些工作?
试过这个:
flat_list = [i for sublist in a for i in sublist]
for i in flat_list:
print 'element - ', i
结果(部分):
element - h
element - a
element - p
element - p
element - y
element -
element - t
我不确定我是否完全理解你的问题,如果我离题太远请告诉我,但是,根据你提供的输入,你有一个列表列表。不仅如此,如果那是你一直拥有的结构,你可以用
取出你需要的东西
a = a[0]
那只会给你一个列表。
然后你可以简单地迭代为:
for i in a:
print(i)
但是,如果这只是一个样本,而您实际上有这样的东西:
[[],[],[],[]]
并且您想将其完全扁平化为一个列表,那么您要使用的理解是这样的:
flat_list = [i for sublist in a for i in sublist]
然后你只需要一个列表:[1, 2, 3, 4]
然后你只需迭代你想要的:
for i in flat_list:
print(i)
或者,如果您还想打印出索引,那么您可以这样做:
for i, v in enumerate(flat_list):
print("{}: {}".format(i, v))
关于您对扩展的使用的最后评论。
extend
作为方法说明的帮助:
extend(...)
L.extend(iterable) -- extend list by appending elements from the iterable
所以,它的用法是 "extends" 这个例子完成的列表:
a = [1, 2, 3]
b = [4, 5, 6]
a.extend(b)
# a will now be [1, 2, 3, 4, 5, 6]
运行 您的输入:
a = [[u'happy', u'thursday', u'from', u'my', u'big', u'sweater', u'and', u'this', u'ART', u'@', u'East', u'Village', u',', u'Manhattan', u'https', u':', u'//t.co/5k8PUInmqK'], [u'RT', u'@', u'MayorKev', u':', u'IM', u'SO', u'HYPEE', u'@', u'calloutband', u'@', u'FreakLikeBex', u'#', u'Callout', u'#', u'TheBitterEnd', u'#', u'Manhattan', u'#', u'Music', u'#', u'LiveMusic', u'#', u'NYC', u'#', u'NY', u'#', u'Jersey', u'#', u'NJ', u'http', u':', u'//t.co/0\u2026']]
在我的代码中,产生了这个输出:
0: happy
1: thursday
2: from
3: my
4: big
5: sweater
6: and
7: this
8: ART
9: @
10: East
11: Village
12: ,
13: Manhattan
14: https
15: :
16: //t.co/5k8PUInmqK
a= [[u'happy', u'thursday', u'from', u'my', u'big', u'sweater', u'and', u'this', u'ART', u'@', u'East', u'Village', u',', u'Manhattan', u'https', u':', u'//t.co/5k8PUInmqK'], [u'RT', u'@', u'MayorKev', u':', u'IM', u'SO', u'HYPEE', u'@', u'calloutband', u'@', u'FreakLikeBex', u'#', u'Callout', u'#', u'TheBitterEnd', u'#', u'Manhattan', u'#', u'Music', u'#', u'LiveMusic', u'#', u'NYC', u'#', u'NY', u'#', u'Jersey', u'#', u'NJ', u'http', u':', u'//t.co/0\u2026']]
from itertools import chain
flat_a = list(chain.from_iterable(a))
['happy', 'thursday', 'from', 'my', 'big', 'sweater', 'and', 'this', 'ART', '@', 'East', 'Village', ',', 'Manhattan', 'https', ':', '//t.co/5k8PUInmqK', 'RT', '@', 'MayorKev', ':', 'IM', 'SO', 'HYPEE', '@', 'calloutband', '@', 'FreakLikeBex', '#', 'Callout', '#', 'TheBitterEnd', '#', 'Manhattan', '#', 'Music', '#', 'LiveMusic', '#', 'NYC', '#', 'NY', '#', 'Jersey', '#', 'NJ', 'http', ':', '//t.co/0…']
print(flat_a)
a= [[u'happy', u'thursday', u'from', u'my', u'big', u'sweater', u'and', u'this', u'ART', u'@', u'East', u'Village', u',', u'Manhattan', u'https', u':', u'//t.co/5k8PUInmqK'], [u'RT', u'@', u'MayorKev', u':', u'IM', u'SO', u'HYPEE', u'@', u'calloutband', u'@', u'FreakLikeBex', u'#', u'Callout', u'#', u'TheBitterEnd', u'#', u'Manhattan', u'#', u'Music', u'#', u'LiveMusic', u'#', u'NYC', u'#', u'NY', u'#', u'Jersey', u'#', u'NJ', u'http', u':', u'//t.co/0\u2026']]
for L in a:
for e in L:
print "element "+e
element happy
element thursday
element from
element my
element big
element sweater
element and
element this
element ART
element @
element East
嵌套列表理解应该可以解决您的第一个问题。
a = [token for tweetL in tweetList for token in nltk.tokenize.word_tokenize(tweetL)]
此构造可让您迭代从嵌套 for 循环中找到的元素。最外层的 for 循环总是最先出现,然后是第二个最外层的循环,依此类推,直到最内层的 for 循环最后出现。
这可能有助于理解这等同于:
a = []
for tweetL in tweetList:
for token in nltk.tokenize.word_tokenize(tweetL):
a.append(token)
在Python2中,您可以使用utf-8对unicode字符串进行编码。这会将它们从 unicode
类型转换为 str
类型,这应该解决 UnicodeEncodeError
.
示例:
u'\u2713'.encode('utf-8')
有关Python 2 Unicode 的更多信息,您可以在此处阅读:https://docs.python.org/2/howto/unicode.html
我有以下数据结构:
a= [
[u'happy', u'thursday', u'from', u'my', u'big', u'sweater', u'and', u'this',
u'ART', u'@', u'East', u'Village', u',', u'Manhattan', u'https',
u':', u'//t.co/5k8PUInmqK'],
[u'RT', u'@', u'MayorKev', u':', u'IM', u'SO', u'HYPEE', u'@', u'calloutband',
u'@', u'FreakLikeBex', u'#', u'Callout', u'#', u'TheBitterEnd', u'#',
u'Manhattan', u'#', u'Music', u'#', u'LiveMusic', u'#', u'NYC',
u'#', u'NY', u'#',
u'Jersey', u'#', u'NJ', u'http', u':', u'//t.co/0\u2026']
]
在我看来,它是一个字符串列表的列表,除了它被一对 [ ] 而不是 ( ) 包围。 [ ] 对是系统生成的结果:
a = [nltk.tokenize.word_tokenize(tweetL) for tweetL in tweetList]
最终,我需要将这个结构展平为一个字符串列表,并对单词进行一些正则表达式和计数操作,但是 [ ] 的外部对阻止了这一点。
我尝试使用:
list.extend()
和
ll = len(a)
for n in xrange(ll):
print 'list - ', a[n], 'number = ', n
但仍然得到相同的结果:
list - [ number = 1
list - u number = 2
list - ' number = 3
list - h number = 4
list - a number = 5
list - p number = 6
list - p number = 7
如您所见,代码将字符串的每个符号视为列表的元素,而不是将整个字符串视为一个元素
可以高效地完成哪些工作?
试过这个:
flat_list = [i for sublist in a for i in sublist]
for i in flat_list:
print 'element - ', i
结果(部分):
element - h
element - a
element - p
element - p
element - y
element -
element - t
我不确定我是否完全理解你的问题,如果我离题太远请告诉我,但是,根据你提供的输入,你有一个列表列表。不仅如此,如果那是你一直拥有的结构,你可以用
取出你需要的东西a = a[0]
那只会给你一个列表。
然后你可以简单地迭代为:
for i in a:
print(i)
但是,如果这只是一个样本,而您实际上有这样的东西:
[[],[],[],[]]
并且您想将其完全扁平化为一个列表,那么您要使用的理解是这样的:
flat_list = [i for sublist in a for i in sublist]
然后你只需要一个列表:[1, 2, 3, 4]
然后你只需迭代你想要的:
for i in flat_list:
print(i)
或者,如果您还想打印出索引,那么您可以这样做:
for i, v in enumerate(flat_list):
print("{}: {}".format(i, v))
关于您对扩展的使用的最后评论。
extend
作为方法说明的帮助:
extend(...)
L.extend(iterable) -- extend list by appending elements from the iterable
所以,它的用法是 "extends" 这个例子完成的列表:
a = [1, 2, 3]
b = [4, 5, 6]
a.extend(b)
# a will now be [1, 2, 3, 4, 5, 6]
运行 您的输入:
a = [[u'happy', u'thursday', u'from', u'my', u'big', u'sweater', u'and', u'this', u'ART', u'@', u'East', u'Village', u',', u'Manhattan', u'https', u':', u'//t.co/5k8PUInmqK'], [u'RT', u'@', u'MayorKev', u':', u'IM', u'SO', u'HYPEE', u'@', u'calloutband', u'@', u'FreakLikeBex', u'#', u'Callout', u'#', u'TheBitterEnd', u'#', u'Manhattan', u'#', u'Music', u'#', u'LiveMusic', u'#', u'NYC', u'#', u'NY', u'#', u'Jersey', u'#', u'NJ', u'http', u':', u'//t.co/0\u2026']]
在我的代码中,产生了这个输出:
0: happy
1: thursday
2: from
3: my
4: big
5: sweater
6: and
7: this
8: ART
9: @
10: East
11: Village
12: ,
13: Manhattan
14: https
15: :
16: //t.co/5k8PUInmqK
a= [[u'happy', u'thursday', u'from', u'my', u'big', u'sweater', u'and', u'this', u'ART', u'@', u'East', u'Village', u',', u'Manhattan', u'https', u':', u'//t.co/5k8PUInmqK'], [u'RT', u'@', u'MayorKev', u':', u'IM', u'SO', u'HYPEE', u'@', u'calloutband', u'@', u'FreakLikeBex', u'#', u'Callout', u'#', u'TheBitterEnd', u'#', u'Manhattan', u'#', u'Music', u'#', u'LiveMusic', u'#', u'NYC', u'#', u'NY', u'#', u'Jersey', u'#', u'NJ', u'http', u':', u'//t.co/0\u2026']]
from itertools import chain
flat_a = list(chain.from_iterable(a))
['happy', 'thursday', 'from', 'my', 'big', 'sweater', 'and', 'this', 'ART', '@', 'East', 'Village', ',', 'Manhattan', 'https', ':', '//t.co/5k8PUInmqK', 'RT', '@', 'MayorKev', ':', 'IM', 'SO', 'HYPEE', '@', 'calloutband', '@', 'FreakLikeBex', '#', 'Callout', '#', 'TheBitterEnd', '#', 'Manhattan', '#', 'Music', '#', 'LiveMusic', '#', 'NYC', '#', 'NY', '#', 'Jersey', '#', 'NJ', 'http', ':', '//t.co/0…']
print(flat_a)
a= [[u'happy', u'thursday', u'from', u'my', u'big', u'sweater', u'and', u'this', u'ART', u'@', u'East', u'Village', u',', u'Manhattan', u'https', u':', u'//t.co/5k8PUInmqK'], [u'RT', u'@', u'MayorKev', u':', u'IM', u'SO', u'HYPEE', u'@', u'calloutband', u'@', u'FreakLikeBex', u'#', u'Callout', u'#', u'TheBitterEnd', u'#', u'Manhattan', u'#', u'Music', u'#', u'LiveMusic', u'#', u'NYC', u'#', u'NY', u'#', u'Jersey', u'#', u'NJ', u'http', u':', u'//t.co/0\u2026']]
for L in a:
for e in L:
print "element "+e
element happy
element thursday
element from
element my
element big
element sweater
element and
element this
element ART
element @
element East
嵌套列表理解应该可以解决您的第一个问题。
a = [token for tweetL in tweetList for token in nltk.tokenize.word_tokenize(tweetL)]
此构造可让您迭代从嵌套 for 循环中找到的元素。最外层的 for 循环总是最先出现,然后是第二个最外层的循环,依此类推,直到最内层的 for 循环最后出现。
这可能有助于理解这等同于:
a = []
for tweetL in tweetList:
for token in nltk.tokenize.word_tokenize(tweetL):
a.append(token)
在Python2中,您可以使用utf-8对unicode字符串进行编码。这会将它们从 unicode
类型转换为 str
类型,这应该解决 UnicodeEncodeError
.
示例:
u'\u2713'.encode('utf-8')
有关Python 2 Unicode 的更多信息,您可以在此处阅读:https://docs.python.org/2/howto/unicode.html