wiki:Python/Snippet/データ操作

データ操作

リストからタプルへ

l = [1, 2, 3]
t = tuple(l)
print t

タプルからリストへ

t = (1, 2, 3)
l = list(t)
print l
  • こちらのほうがもっと簡単。

タプルからリストへ

l = (1, 2, 3)
n = [ ll for ll in l]
print n
  • 内包表記というのを利用すると便利です。

タプル

a = (1, 2, 3)
a1, a2, a3 = a
print a1
print a2
print a3

リスト

list = [1, 2, 3, 4, 5, 6, 7]
for item in list:
  if item % 3 == 0:
    list.remove(item)
print list
  • 課題:リストのサイズが大きくなった場合削除に時間がかかるか?

リストに含まれるか

list = [1, 2, 3, 4, 5, 6, 7]
x = 5
if x in list:
  print '%d exists' % x

list = [[1, 2], [3, 4], [5, 6]]
x = [3, 4]
if x in list:
  print '[%d, %d] exists' % (x[0], x[1])

タプルに含まれるか

x = 3
list2 = (1, 2, 3, 4, 5, 6, 7)
if x in list:
  print '%d exists' % x

x = (3, 4)
list3 = ((1, 2), (3, 4), (5, 6))
if x in list3:
  print '(%d, %d) exists' % x

繰り返し動作

def catstr(x, y):
  return x + y
seq1 = ['a', 'b', 'c']
seq2 = ['1', '2', '3']
print map(catstr, seq1, seq2)

辞書の表示

a = {'k1':100, 'k2':101, 'k3':102}
for k in a:
  print k, a[k]

データの連結

s1 = 'sssssssss1'
s2 = 'sssssssss2'
s3 = 'sssssssss3'
s4 = 'sssssssss4'
l = [s1, s2, s3, s4]
print ''.join(l)
  • コピーを少なくしてデータを連結するため。

バッファ

s = '123456789abcdefgh'
x = buffer(s, 6, 2)
ss = str(x)
print ss
  • 長いデータの一部を取り出したり、見たりするときに便利。

バイナリデータを扱う

 packet = struct.pack("!HH", 500, 1)
 (l, x) = struct.unpack("!HH", packet[0:4])
 print l, x
  • ネットワークのパケット処理などに活躍します。

データの表示

print (data,)
  • printはタプルにして表示すると便利

キュー

import Queue

q = Queue.Queue()

for n in range(5):
  q.put('message '+ str(n))

while not q.empty():
  print q.get()
  • スレッド動作も考慮しているので便利かな。