2017-02-26 12 views
1

私はPythonの初心者です。タプルペア(a、b)のリストに格納されている整数にアクセスして使用する方法を理解しようとしています。 aをbで割ることができ、条件を満たす場合は新しいリストにタプルを追加し、タプルを数えます。私は基本的な関数とfor-loopsだけを使ってこれをしたいと思います。タプルのリストからの要素へのアクセス/使用python 3.x

私は私のような大きさの異なる二つの別々の整数のリストからタプルのリストを作成するために使用される別のstackoverflowの質問からいくつかのコードを借りた:これは私に与え

list_a = list(range(10, 51)) 

list_b = list(range(1, 21)) 

new_tuple_list = [] 
new_tuple_count = 0 

for i, a in enumerate(list_a): 
    new_tuple_list.append((a, list_b[i % len(list_b)])) 
    divisors_count += 1 

print ("New tuple count: ", new_tuple_count) 
print (new_tuple_list) 

: 新しいタプル数:41

[(10, 1), (11, 2), (12, 3), (13, 4), (14, 5), (15, 6), (16, 7), (17, 8), (18, 9), (19, 10), (20, 11), (21, 12), (22, 13), (23, 14), (24, 15), (25, 16), (26, 17), (27, 18), (28, 19), (29, 20), (30, 1), (31, 2), (32, 3), (33, 4), (34, 5), (35, 6), (36, 7), (37, 8), (38, 9), (39, 10), (40, 11), (41, 12), (42, 13), (43, 14), (44, 15), (45, 16), (46, 17), (47, 18), (48, 19), (49, 20), (50, 1)] 

しかし、(10、1)、11 by 2などから10を1で割るかどうかを知りたい場合は、整数を取得しますか?その場合は、新しいリストに追加しますこれが真であるタプルペアの数を数えます。 私はこの試みている:任意の助けをいただければ幸い

def divisors(list_a, list_b): 

    test_int = 0 
    new_divisors = [] 

    for a in list_a: 
     for b in list_b: 
      if a/b % 2 == 0: 
       test_int += 1 
       new_divisors += (a,b) 

    return new_divisors 
    return test_int 

    NUM_tuples = [] 
    tuples_count = 0 


    for i, c in enumerate(list_a): 
     NUM_tuples.append((c, list_b[i % len(list_b)])) 
     tuples_count += 1 
    return tuples_count 
    return NUM_tuples 

divisors(list_a, list_b) 

tuple_test = [(10,1), (11,2)] 
def find_divisors (x): 

    NUM_tuples = [] 
    tuples_count = 0 

    for x[0] in pairs: 
     for x[1] in pairs: 
      if x[0]/x[1] % 2 == 0: 
       NUM_tuples.append(pairs) 
       tuples_count += 1 
       return (x[0]/x[1] % 2) 
    return NUM_tuples 
    return tuples_count 

find_divisors(tuple_test) 

を私はまた、このような何かを試してみました!

+1

リストを組み合わせるには、 'list(zip(list_a、list_b))'を使用します。それはもっと基本的な方法です。 –

+2

インデントを再確認してください。例えば、連続した行に2つの 'return'文を書いたように書かれているように見えます。これが実際に記述したコードの場合は、チュートリアルを確認する必要があります。 – jonrsharpe

+0

@MadPhysicist 'zip'は彼のlist_bは20個の値しか持たないので、zipは'(29,20) 'で止まるので動作しません。しかし、彼の結果をチェックすると、それ以降は '(30,1)'などで続きます。 – abccd

答えて

3

は、以下のことを試してみてください。

a = range(1,20) 
b = range(1,5) 
c = [(x,y) for x in a for y in b if x%y==0] 
print(c) 

それはあなたが簡単に私が考えるあなたのプログラムのためにこれを適応させることができ、次の出力

[(1, 1), (2, 1), (2, 2), (3, 1), (3, 3), (4, 1), (4, 2), (4, 4), (5, 1), (6, 1), (6, 2), (6, 3), (7, 1), (8, 1), (8, 2), (8, 4), (9, 1), (9, 3), (10, 1), (10, 2), (11, 1), (12, 1), (12, 2), (12, 3), (12, 4), (13, 1), (14, 1), (14, 2), (15, 1), (15, 3), (16, 1), (16, 2), (16, 4), (17, 1), (18, 1), (18, 2), (18, 3), (19, 1)] 

を与えます!

PS:上記のcの長さは、タプル数を示します。

+0

これは素晴らしく、単にエレガントです!ありがとう! – virgiliocyte

+0

Plsは役に立ちましたら回答を受け入れます。ありがとう。 – Ujjwal

0

itertools.cycleを使用して、タプルの元のリストを次のようにするコードを減らすこともできます。

from itertools import cycle 

# a and b don't have to be a list unless you need them as a list elsewhere. 
a = range(10, 51) 
b = range(1, 21) 
# cycle the shorter one 
tuple_lst = list(zip(a, cycle(b))) 

print("New tuple count:", len(tuple_lst)) 
print(tuple_lst) 
関連する問題