A = ['1','1','1','3','3','4']

B = ['5','9','3','4','8','1']

Ketika nilai dalam daftar A berubah, misalnya dari 1 menjadi 3. Temukan jumlah himpunan nilai dalam daftar B, misalnya jumlah (5,9,3). Daftar A dan B berukuran sama.

Dalam daftar A = ['1','1','1','3','3','4']
SEARCH - 1) dengan nilai berubah dari 1 menjadi 3, 2) dengan nilai berubah dari 3 menjadi 4.

Dalam daftar B = ['5','9','3','4','8','1']
HASIL - 1) jumlahkan hanya 5+9+3, 2) jumlahkan hanya 4+8.

Apakah ada cara untuk melakukan ini? Karena aku tidak bisa memikirkan cara logis untuk menyiasatinya.

Awal saya untuk kode:

A = ['1','1','1','3','3','4']

B = ['5','9','3','4','8','1']


C=[int(value) for value in A]
print(C)

for i in C:
    if C[:-i] == C[:i]:

Ini akan melihat melalui setiap nilai tetangga A dan melihat apakah mereka sama tetapi saya tidak tahu bagaimana menghubungkan ini dengan nilai-nilai daftar B.

-6
M. Chan 11 Agustus 2017, 12:04

2 jawaban

Jawaban Terbaik

Sekarang saya mengerti bahwa daftar A itu sendiri tidak akan berubah, tetapi Anda mengungkapkan gagasan perubahan yang berarti bahwa daftar tersebut memiliki partisi di mana ada elemen yang berdekatan yang berbeda, maka solusi yang berbeda muncul di benak saya:

Mengingat data asli Anda:

A = ['1','1','1','3','3','4']

B = ['5','9','3','4','8','1']

Kita dapat menggunakan defaultdict untuk mengelompokkan data ini:

from collections import defaultdict
D = defaultdict(list)

for a, b in zip(A,B):
    D[a].append(int(b))

Hanya untuk menunjukkan apa yang telah kami kumpulkan:

for a, b in D.items():
    print(a,b)
>> 1 [5, 9, 3]
>> 3 [4, 8]
>> 4 [1]

Sekarang kita dapat menghitung beberapa jumlah:

result = [sum(b) for a,b in D.items()]
print(result)
>> [17, 12, 1]

Catatan tentang defaultdict:

Saat instance dibuat:

D = defaultdict(list)

Ini menciptakan defaultdict yang, ketika menemukan kunci baru akan membuat instance parameter. Dalam hal ini menciptakan list baru

Jadi setiap baris:

D[a].append(int(b))

Ketika a adalah kunci yang D belum pernah dilihat sebelumnya, list baru akan dibuat, yang dikembalikan, di mana .append(.... diterapkan.

0
quamrana 11 Agustus 2017, 11:53

Yang perlu Anda lakukan adalah memikirkan masalah yang lebih sederhana:

Misalkan Anda memiliki:

A = 1
B = 5

Bagaimana kita dapat mendeteksi bahwa A telah berubah?

Kita perlu menyimpan salinan A sehingga perbandingan dapat dilakukan jika menurut kita telah terjadi perubahan:

A = 1
B = 5

old_A = A  # take a copy

# Detect a change:
if A != old_A:
    result = B

Sekarang sepertinya Anda telah memperbarui pertanyaan Anda dengan ide serupa:

A = ['1','1','1','3','3','4']

B = ['5','9','3','4','8','1']

C = A[:] # take a copy

Sekarang kita harus mendeteksi perubahan:

# suppose that A is now ['3','3','3','3','3','4']
#      while C is still ['1','1','1','3','3','4']
comp = [ a!=c for (a,c) in zip(A,C)]

print(comp)
>> [True,True,True,False,False,False]

Sekarang kita tahu nomor mana yang telah berubah, kita dapat memilih item yang sesuai dari B:

result = [int(b) for c,b in zip(comp,B) if c] # note the int(b)
>> [5, 9, 3]
print(sum(result))
>> 17

Jadi untuk meninjau:

Perhatikan penggunaan penyalinan daftar:

C = A[:]

Perhatikan penggunaan pemahaman daftar:

comp = [ x for y in z]
result = [ x for y in z if q]

Perhatikan penggunaan fungsi zip:

for (a,c) in zip(A,C)

Saya akan membiarkannya sebagai latihan untuk menciutkan langkah-langkah ke dalam jumlah pemahaman daftar tunggal.

0
quamrana 11 Agustus 2017, 10:41